mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-02-03 12:31:15 +00:00
Merge branch 'master' into emscripten
This commit is contained in:
commit
8e30b767d3
@ -37,6 +37,9 @@ Direct3DRMRenderer* OpenGL15Renderer::Create(DWORD width, DWORD height)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
|
glCullFace(GL_BACK);
|
||||||
|
glFrontFace(GL_CCW);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
glEnable(GL_COLOR_MATERIAL);
|
glEnable(GL_COLOR_MATERIAL);
|
||||||
@ -316,6 +319,8 @@ void OpenGL15Renderer::SubmitDraw(
|
|||||||
glLoadMatrixf(&mvMatrix[0][0]);
|
glLoadMatrixf(&mvMatrix[0][0]);
|
||||||
glEnable(GL_NORMALIZE);
|
glEnable(GL_NORMALIZE);
|
||||||
|
|
||||||
|
glColor4ub(appearance.color.r, appearance.color.g, appearance.color.b, appearance.color.a);
|
||||||
|
|
||||||
// Bind texture if present
|
// Bind texture if present
|
||||||
if (appearance.textureId != NO_TEXTURE_ID) {
|
if (appearance.textureId != NO_TEXTURE_ID) {
|
||||||
auto& tex = m_textures[appearance.textureId];
|
auto& tex = m_textures[appearance.textureId];
|
||||||
@ -342,7 +347,6 @@ void OpenGL15Renderer::SubmitDraw(
|
|||||||
glBegin(GL_TRIANGLES);
|
glBegin(GL_TRIANGLES);
|
||||||
for (size_t i = 0; i < count; i++) {
|
for (size_t i = 0; i < count; i++) {
|
||||||
const GeometryVertex& v = vertices[i];
|
const GeometryVertex& v = vertices[i];
|
||||||
glColor4ub(appearance.color.r, appearance.color.g, appearance.color.b, appearance.color.a);
|
|
||||||
glNormal3f(v.normals.x, v.normals.y, v.normals.z);
|
glNormal3f(v.normals.x, v.normals.y, v.normals.z);
|
||||||
glTexCoord2f(v.texCoord.u, v.texCoord.v);
|
glTexCoord2f(v.texCoord.u, v.texCoord.v);
|
||||||
glVertex3f(v.position.x, v.position.y, v.position.z);
|
glVertex3f(v.position.x, v.position.y, v.position.z);
|
||||||
|
|||||||
@ -64,8 +64,6 @@ HRESULT Direct3DRMMeshImpl::AddGroup(
|
|||||||
|
|
||||||
m_groups.push_back(std::move(group));
|
m_groups.push_back(std::move(group));
|
||||||
|
|
||||||
UpdateBox(newIndex);
|
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,13 +279,7 @@ void Direct3DRMMeshImpl::UpdateBox()
|
|||||||
m_box.max = {-INF, -INF, -INF};
|
m_box.max = {-INF, -INF, -INF};
|
||||||
|
|
||||||
for (size_t i = 0; i < m_groups.size(); ++i) {
|
for (size_t i = 0; i < m_groups.size(); ++i) {
|
||||||
UpdateBox(i);
|
for (const D3DRMVERTEX& v : m_groups[i].vertices) {
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Direct3DRMMeshImpl::UpdateBox(DWORD groupIndex)
|
|
||||||
{
|
|
||||||
for (const D3DRMVERTEX& v : m_groups[groupIndex].vertices) {
|
|
||||||
m_box.min.x = std::min(m_box.min.x, v.position.x);
|
m_box.min.x = std::min(m_box.min.x, v.position.x);
|
||||||
m_box.min.y = std::min(m_box.min.y, v.position.y);
|
m_box.min.y = std::min(m_box.min.y, v.position.y);
|
||||||
m_box.min.z = std::min(m_box.min.z, v.position.z);
|
m_box.min.z = std::min(m_box.min.z, v.position.z);
|
||||||
@ -296,6 +288,7 @@ void Direct3DRMMeshImpl::UpdateBox(DWORD groupIndex)
|
|||||||
m_box.max.z = std::max(m_box.max.z, v.position.z);
|
m_box.max.z = std::max(m_box.max.z, v.position.z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT Direct3DRMMeshImpl::GetBox(D3DRMBOX* box)
|
HRESULT Direct3DRMMeshImpl::GetBox(D3DRMBOX* box)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -212,7 +212,13 @@ bool IsBoxInFrustum(const D3DVECTOR corners[8], const Plane planes[6])
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Direct3DRMViewportImpl::CollectMeshesFromFrame(IDirect3DRMFrame* frame, D3DRMMATRIX4D parentMatrix)
|
void Direct3DRMViewportImpl::CollectMeshesFromFrame(
|
||||||
|
IDirect3DRMFrame* frame,
|
||||||
|
D3DRMMATRIX4D parentMatrix,
|
||||||
|
std::vector<GeometryVertex>& verts,
|
||||||
|
std::vector<D3DRMVERTEX>& d3dVerts,
|
||||||
|
std::vector<DWORD>& faces
|
||||||
|
)
|
||||||
{
|
{
|
||||||
Direct3DRMFrameImpl* frameImpl = static_cast<Direct3DRMFrameImpl*>(frame);
|
Direct3DRMFrameImpl* frameImpl = static_cast<Direct3DRMFrameImpl*>(frame);
|
||||||
D3DRMMATRIX4D localMatrix;
|
D3DRMMATRIX4D localMatrix;
|
||||||
@ -234,7 +240,7 @@ void Direct3DRMViewportImpl::CollectMeshesFromFrame(IDirect3DRMFrame* frame, D3D
|
|||||||
IDirect3DRMFrame* childFrame = nullptr;
|
IDirect3DRMFrame* childFrame = nullptr;
|
||||||
visual->QueryInterface(IID_IDirect3DRMFrame, (void**) &childFrame);
|
visual->QueryInterface(IID_IDirect3DRMFrame, (void**) &childFrame);
|
||||||
if (childFrame) {
|
if (childFrame) {
|
||||||
CollectMeshesFromFrame(childFrame, worldMatrix);
|
CollectMeshesFromFrame(childFrame, worldMatrix, verts, d3dVerts, faces);
|
||||||
childFrame->Release();
|
childFrame->Release();
|
||||||
visual->Release();
|
visual->Release();
|
||||||
continue;
|
continue;
|
||||||
@ -273,9 +279,12 @@ void Direct3DRMViewportImpl::CollectMeshesFromFrame(IDirect3DRMFrame* frame, D3D
|
|||||||
DWORD vtxCount, faceCount, vpf, dataSize;
|
DWORD vtxCount, faceCount, vpf, dataSize;
|
||||||
mesh->GetGroup(gi, &vtxCount, &faceCount, &vpf, &dataSize, nullptr);
|
mesh->GetGroup(gi, &vtxCount, &faceCount, &vpf, &dataSize, nullptr);
|
||||||
|
|
||||||
std::vector<GeometryVertex> verts(dataSize * vpf);
|
verts.reserve(dataSize);
|
||||||
std::vector<D3DRMVERTEX> d3dVerts(vtxCount);
|
verts.clear();
|
||||||
std::vector<DWORD> faces(dataSize);
|
d3dVerts.resize(vtxCount);
|
||||||
|
d3dVerts.clear();
|
||||||
|
faces.resize(dataSize);
|
||||||
|
faces.clear();
|
||||||
mesh->GetVertices(gi, 0, vtxCount, d3dVerts.data());
|
mesh->GetVertices(gi, 0, vtxCount, d3dVerts.data());
|
||||||
mesh->GetGroup(gi, nullptr, nullptr, nullptr, nullptr, faces.data());
|
mesh->GetGroup(gi, nullptr, nullptr, nullptr, nullptr, faces.data());
|
||||||
|
|
||||||
@ -356,8 +365,11 @@ HRESULT Direct3DRMViewportImpl::RenderScene()
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<GeometryVertex> verts;
|
||||||
|
std::vector<D3DRMVERTEX> d3dVerts;
|
||||||
|
std::vector<DWORD> faces;
|
||||||
ExtractFrustumPlanes(viewProj);
|
ExtractFrustumPlanes(viewProj);
|
||||||
CollectMeshesFromFrame(m_rootFrame, identity);
|
CollectMeshesFromFrame(m_rootFrame, identity, verts, d3dVerts, faces);
|
||||||
return m_renderer->FinalizeFrame();
|
return m_renderer->FinalizeFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -94,7 +94,6 @@ struct Direct3DRMMeshImpl : public Direct3DRMObjectBaseImpl<IDirect3DRMMesh> {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void UpdateBox();
|
void UpdateBox();
|
||||||
void UpdateBox(DWORD groupIndex);
|
|
||||||
|
|
||||||
std::vector<MeshGroup> m_groups;
|
std::vector<MeshGroup> m_groups;
|
||||||
D3DRMBOX m_box;
|
D3DRMBOX m_box;
|
||||||
|
|||||||
@ -37,7 +37,13 @@ struct Direct3DRMViewportImpl : public Direct3DRMObjectBaseImpl<IDirect3DRMViewp
|
|||||||
private:
|
private:
|
||||||
HRESULT RenderScene();
|
HRESULT RenderScene();
|
||||||
void CollectLightsFromFrame(IDirect3DRMFrame* frame, D3DRMMATRIX4D parentMatrix, std::vector<SceneLight>& lights);
|
void CollectLightsFromFrame(IDirect3DRMFrame* frame, D3DRMMATRIX4D parentMatrix, std::vector<SceneLight>& lights);
|
||||||
void CollectMeshesFromFrame(IDirect3DRMFrame* frame, D3DRMMATRIX4D parentMatrix);
|
void CollectMeshesFromFrame(
|
||||||
|
IDirect3DRMFrame* frame,
|
||||||
|
D3DRMMATRIX4D parentMatrix,
|
||||||
|
std::vector<GeometryVertex>& verts,
|
||||||
|
std::vector<D3DRMVERTEX>& d3dVerts,
|
||||||
|
std::vector<DWORD>& faces
|
||||||
|
);
|
||||||
void UpdateProjectionMatrix();
|
void UpdateProjectionMatrix();
|
||||||
Direct3DRMRenderer* m_renderer;
|
Direct3DRMRenderer* m_renderer;
|
||||||
D3DCOLOR m_backgroundColor = 0xFF000000;
|
D3DCOLOR m_backgroundColor = 0xFF000000;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user