Administrative source import: native x86 compilation passed for 423 authored units. Source placement and submission states are migrated separately; this commit does not imply peer acceptance.
Previous head: 35d2a8cb36
Payload SHA256: 592f016d2730c5593bb653aa054c1e5f76a6df72c8f5a09e66f74876e2e33dee
76 lines
2.2 KiB
C++
76 lines
2.2 KiB
C++
#include "Render/Primitives/DepthAlpha.h"
|
|
#include "Render/Primitives/LightmappedPrimitive.h"
|
|
|
|
#include <cstring>
|
|
#include <windows.h>
|
|
#include <d3d9types.h>
|
|
#include <new>
|
|
|
|
// OFFSET: 0x005690E0
|
|
// FUNCTION: fn_02248
|
|
LightmappedCommand::LightmappedCommand()
|
|
: vertices(nullptr), vertexCount(0), indices(nullptr), indexCount(0), texture(nullptr), lightmap(nullptr), primitiveType(D3DPT_TRIANGLESTRIP) {
|
|
}
|
|
|
|
// OFFSET: 0x00569020
|
|
// FUNCTION: fn_02246
|
|
LightmappedPrimitive::LightmappedPrimitive() : vertices(this->quad), vertexCount(4), indices(nullptr), indexCount(0), primitiveType(D3DPT_TRIANGLESTRIP) {
|
|
for (LightmappedVertex& vertex : this->quad) {
|
|
vertex.x = 0.0f;
|
|
vertex.y = 0.0f;
|
|
vertex.z = 0.0f;
|
|
vertex.rhw = 0.0f;
|
|
vertex.diffuse = 0;
|
|
vertex.specular = 0xFF000000u;
|
|
vertex.u = 0.0f;
|
|
vertex.v = 0.0f;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00568F90
|
|
// FUNCTION: fn_02245
|
|
LightmappedPrimitive::LightmappedPrimitive(const LightmappedPrimitive& other) : LightmappedPrimitive() {
|
|
std::memcpy(this->quad, other.quad, sizeof(this->quad));
|
|
}
|
|
|
|
// ORIGINAL_SITE: 0x00561113 in fn_02161 (fragment)
|
|
LightmappedPrimitivePool::LightmappedPrimitivePool() {
|
|
this->m_commands.resize(8192, LightmappedPrimitive());
|
|
this->m_current = this->m_commands.begin();
|
|
}
|
|
|
|
// OFFSET: 0x00AC1D30
|
|
// FUNCTION: fn_17592
|
|
LightmappedPrimitive* LightmappedPrimitivePool::Acquire() {
|
|
if (this->m_current == this->m_commands.end()) {
|
|
this->m_commands.emplace_back();
|
|
this->m_current = this->m_commands.end();
|
|
return &this->m_commands.back();
|
|
}
|
|
|
|
LightmappedPrimitive* primitive = &*this->m_current++;
|
|
return new (primitive) LightmappedPrimitive;
|
|
}
|
|
|
|
void LightmappedPrimitivePool::Rewind() {
|
|
this->m_current = this->m_commands.begin();
|
|
}
|
|
|
|
// OFFSET: 0x00559BE0
|
|
// FUNCTION: fn_02071
|
|
void LightmappedQueues::Submit(LightmappedPrimitive* primitive, int queue, bool depthAlpha, float depthStart, float depthEnd) {
|
|
if (depthAlpha) {
|
|
ApplyDepthAlpha(*primitive, depthStart, depthEnd);
|
|
}
|
|
|
|
if (queue == 0) {
|
|
this->first.push_back(primitive);
|
|
} else if (queue == 1) {
|
|
this->second.push_back(primitive);
|
|
}
|
|
}
|
|
|
|
void LightmappedQueues::Clear() {
|
|
this->first.clear();
|
|
this->second.clear();
|
|
}
|