From 4e14ed4e9eaaf9d189848e2df5a76d17b95738d3 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Fri, 14 Apr 2017 01:19:44 +0200 Subject: [PATCH] - Hook up model normals --- src/gl/data/gl_vertexbuffer.h | 11 ++++------- src/gl/models/gl_models.cpp | 2 +- src/gl/renderer/gl_renderstate.cpp | 2 +- src/gl/renderer/gl_renderstate.h | 1 - 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/gl/data/gl_vertexbuffer.h b/src/gl/data/gl_vertexbuffer.h index a7e1cd666..c2715b8af 100644 --- a/src/gl/data/gl_vertexbuffer.h +++ b/src/gl/data/gl_vertexbuffer.h @@ -285,13 +285,10 @@ struct FModelVertex void SetNormal(float nx, float ny, float nz) { - /* - int inx = int(nx * 512); - int iny = int(ny * 512); - int inz = int(nz * 512); - packedNormal = 0x40000000 | ((inx & 1023) << 20) | ((iny & 1023) << 10) | (inz & 1023); - */ - packedNormal = 0; // Per-pixel lighting for models isn't implemented yet so leave this at 0 for now. + int inx = clamp(int(nx * 512), -512, 511); + int iny = clamp(int(ny * 512), -512, 511); + int inz = clamp(int(nz * 512), -512, 511); + packedNormal = /*0x40000000 |*/ ((inx & 1023) << 20) | ((iny & 1023) << 10) | (inz & 1023); } }; diff --git a/src/gl/models/gl_models.cpp b/src/gl/models/gl_models.cpp index 8adee7cf0..a118e20f2 100644 --- a/src/gl/models/gl_models.cpp +++ b/src/gl/models/gl_models.cpp @@ -248,7 +248,7 @@ unsigned int FModelVertexBuffer::SetupFrame(unsigned int frame1, unsigned int fr glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame1].x); glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame1].u); glVertexAttribPointer(VATTR_VERTEX2, 3, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame2].x); - glVertexAttribPointer(VATTR_NORMAL, 4, GL_UNSIGNED_INT_2_10_10_10_REV, false, sizeof(FModelVertex), &VMO[frame2].packedNormal); + glVertexAttribPointer(VATTR_NORMAL, 4, GL_INT_2_10_10_10_REV, true, sizeof(FModelVertex), &VMO[frame2].packedNormal); } else { diff --git a/src/gl/renderer/gl_renderstate.cpp b/src/gl/renderer/gl_renderstate.cpp index 411b7fb69..67c9c21fa 100644 --- a/src/gl/renderer/gl_renderstate.cpp +++ b/src/gl/renderer/gl_renderstate.cpp @@ -280,7 +280,7 @@ bool FRenderState::ApplyShader() mModelMatrix.matrixToGL(activeShader->modelmatrix_index); VSMatrix norm; norm.computeNormalMatrix(mModelMatrix); - mNormalModelMatrix.matrixToGL(activeShader->normalmodelmatrix_index); + norm.matrixToGL(activeShader->normalmodelmatrix_index); activeShader->currentModelMatrixState = true; } else if (activeShader->currentModelMatrixState) diff --git a/src/gl/renderer/gl_renderstate.h b/src/gl/renderer/gl_renderstate.h index 2bef2ff91..241461e13 100644 --- a/src/gl/renderer/gl_renderstate.h +++ b/src/gl/renderer/gl_renderstate.h @@ -132,7 +132,6 @@ public: VSMatrix mModelMatrix; VSMatrix mTextureMatrix; VSMatrix mNormalViewMatrix; - VSMatrix mNormalModelMatrix; FRenderState() {