diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2011-11-30 21:00:21 -0600 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2011-11-30 22:02:25 -0600 |
| commit | b20176b74f28c05ec62ac8bbaeb80ff0ae6bb119 (patch) | |
| tree | 96088791f2e0c420b515dff931eae42cc8f81ccf /Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp | |
| parent | cda94290f533643729a8e55c583b54b6d7184b8b (diff) | |
Add in GLSL setting again.
PS and VS making. Untested and won't work for now.
Add in program shader cache files.
Readd NativeVertexFormat stuffs.
Add in PS and VS cache things.
SetShaders in places.
Fixed EFB cache index computations in OpenGL renderer.
The previous computation was very likely to go out of array bounds,
which could result in crashes on EFB access.
Also, the cache size was rounded down instead of up. This is a problem
since EFB_HEIGHT (528) is not a multiple of EFB_CACHE_RECT_SIZE (64).
Diffstat (limited to 'Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp')
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp index 9fa3281b19..c83c976fb2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/NativeVertexFormat.cpp @@ -19,6 +19,7 @@ #include "x64Emitter.h" #include "ABI.h" #include "MemoryUtil.h" +#include "ProgramShaderCache.h" #include "VertexShaderGen.h" #include "CPMemory.h" @@ -191,8 +192,15 @@ void GLVertexFormat::SetupVertexPointers() { if (vtx_decl.num_normals >= 1) { glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[0])); if (vtx_decl.num_normals == 3) { - glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); - glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); + GLint varLocation1 = SHADER_NORM1_ATTRIB, varLocation2 = SHADER_NORM2_ATTRIB; + if(g_ActiveConfig.bUseGLSL){ + varLocation1 = OGL::ProgramShaderCache::GetAttr(0); + varLocation2 = OGL::ProgramShaderCache::GetAttr(1); + } + if(varLocation1 > 0) + glVertexAttribPointer(varLocation1, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1])); + if(varLocation2 > 0) + glVertexAttribPointer(varLocation2, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2])); } } @@ -216,7 +224,11 @@ void GLVertexFormat::SetupVertexPointers() { } if (vtx_decl.posmtx_offset != -1) { - glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); + GLint varLocation = SHADER_POSMTX_ATTRIB; + if(g_ActiveConfig.bUseGLSL) + varLocation = OGL::ProgramShaderCache::GetAttr(2); + if(varLocation > 0) + glVertexAttribPointer(varLocation, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset)); } #endif } |
