Cocoa Port:
- Bring back glVertexAttribPointer() to the OpenGL blitter. - Disable shaders on PowerPC builds since they don't seem to work there. - Since OS X v10.5 is required, assume the availability of GL_APPLE_vertex_array_object and GL_ARB_vertex_buffer_object. Remove the associated code paths to reduce code complexity.
This commit is contained in:
parent
854c15de87
commit
78c13cc41d
|
@ -123,9 +123,7 @@
|
||||||
{
|
{
|
||||||
CGLContextObj cglDisplayContext;
|
CGLContextObj cglDisplayContext;
|
||||||
|
|
||||||
BOOL isVBOSupported;
|
BOOL isShaderSupported;
|
||||||
BOOL isShadersSupported;
|
|
||||||
BOOL isVAOSupported;
|
|
||||||
|
|
||||||
DisplayViewDelegate *dispViewDelegate;
|
DisplayViewDelegate *dispViewDelegate;
|
||||||
NSInteger lastDisplayMode;
|
NSInteger lastDisplayMode;
|
||||||
|
|
|
@ -32,6 +32,9 @@
|
||||||
|
|
||||||
// VERTEX SHADER FOR DISPLAY OUTPUT
|
// VERTEX SHADER FOR DISPLAY OUTPUT
|
||||||
const char *vShader_100 = {"\
|
const char *vShader_100 = {"\
|
||||||
|
attribute vec2 inPosition; \n\
|
||||||
|
attribute vec2 inTexCoord0; \n\
|
||||||
|
\n\
|
||||||
uniform vec2 viewSize; \n\
|
uniform vec2 viewSize; \n\
|
||||||
uniform float scalar; \n\
|
uniform float scalar; \n\
|
||||||
uniform float angleDegrees; \n\
|
uniform float angleDegrees; \n\
|
||||||
|
@ -51,8 +54,8 @@ const char *vShader_100 = {"\
|
||||||
mat2 scale = mat2( vec2(scalar, 0.0), \n\
|
mat2 scale = mat2( vec2(scalar, 0.0), \n\
|
||||||
vec2( 0.0, scalar)); \n\
|
vec2( 0.0, scalar)); \n\
|
||||||
\n\
|
\n\
|
||||||
vtxTexCoord = gl_MultiTexCoord0; \n\
|
vtxTexCoord = inTexCoord0; \n\
|
||||||
gl_Position = vec4(projection * rotation * scale * gl_Vertex, 1.0, 1.0); \n\
|
gl_Position = vec4(projection * rotation * scale * inPosition, 1.0, 1.0); \n\
|
||||||
} \n\
|
} \n\
|
||||||
"};
|
"};
|
||||||
|
|
||||||
|
@ -1002,19 +1005,12 @@ enum OGLVertexAttributeID
|
||||||
|
|
||||||
glDeleteTextures(1, &displayTexID);
|
glDeleteTextures(1, &displayTexID);
|
||||||
|
|
||||||
if (isVAOSupported)
|
glDeleteVertexArraysAPPLE(1, &vaoMainStatesID);
|
||||||
{
|
glDeleteBuffersARB(1, &vboVertexID);
|
||||||
glDeleteVertexArraysAPPLE(1, &vaoMainStatesID);
|
glDeleteBuffersARB(1, &vboTexCoordID);
|
||||||
}
|
glDeleteBuffersARB(1, &vboElementID);
|
||||||
|
|
||||||
if (isVBOSupported)
|
if (isShaderSupported)
|
||||||
{
|
|
||||||
glDeleteBuffersARB(1, &vboVertexID);
|
|
||||||
glDeleteBuffersARB(1, &vboTexCoordID);
|
|
||||||
glDeleteBuffersARB(1, &vboElementID);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isShadersSupported)
|
|
||||||
{
|
{
|
||||||
glUseProgram(0);
|
glUseProgram(0);
|
||||||
|
|
||||||
|
@ -1082,31 +1078,16 @@ enum OGLVertexAttributeID
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
// Set up VBOs
|
// Set up shaders (but disable on PowerPC, since it doesn't seem to work there)
|
||||||
isVBOSupported = gluCheckExtension((const GLubyte *)"GL_ARB_vertex_buffer_object", glExtString);
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
if (isVBOSupported)
|
isShaderSupported = (gluCheckExtension((const GLubyte *)"GL_ARB_shader_objects", glExtString) &&
|
||||||
{
|
|
||||||
glGenBuffersARB(1, &vboVertexID);
|
|
||||||
glGenBuffersARB(1, &vboTexCoordID);
|
|
||||||
glGenBuffersARB(1, &vboElementID);
|
|
||||||
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
|
||||||
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLint) * (2 * 8), vtxBuffer, GL_STATIC_DRAW_ARB);
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTexCoordID);
|
|
||||||
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLfloat) * (2 * 8), texCoordBuffer, GL_STATIC_DRAW_ARB);
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
|
||||||
|
|
||||||
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vboElementID);
|
|
||||||
glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, sizeof(GLubyte) * 12, vtxIndexBuffer, GL_STATIC_DRAW_ARB);
|
|
||||||
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set up shaders
|
|
||||||
isShadersSupported = (gluCheckExtension((const GLubyte *)"GL_ARB_shader_objects", glExtString) &&
|
|
||||||
gluCheckExtension((const GLubyte *)"GL_ARB_vertex_shader", glExtString) &&
|
gluCheckExtension((const GLubyte *)"GL_ARB_vertex_shader", glExtString) &&
|
||||||
gluCheckExtension((const GLubyte *)"GL_ARB_fragment_shader", glExtString) &&
|
gluCheckExtension((const GLubyte *)"GL_ARB_fragment_shader", glExtString) &&
|
||||||
gluCheckExtension((const GLubyte *)"GL_ARB_vertex_program", glExtString) );
|
gluCheckExtension((const GLubyte *)"GL_ARB_vertex_program", glExtString) );
|
||||||
if (isShadersSupported)
|
#else
|
||||||
|
isShaderSupported = false;
|
||||||
|
#endif
|
||||||
|
if (isShaderSupported)
|
||||||
{
|
{
|
||||||
GLint shaderStatus = SetupShaders(&shaderProgram, &vertexShaderID, &fragmentShaderID, vShader_100, fShader_100);
|
GLint shaderStatus = SetupShaders(&shaderProgram, &vertexShaderID, &fragmentShaderID, vShader_100, fShader_100);
|
||||||
if (shaderStatus == GL_TRUE)
|
if (shaderStatus == GL_TRUE)
|
||||||
|
@ -1123,32 +1104,54 @@ enum OGLVertexAttributeID
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
isShadersSupported = false;
|
isShaderSupported = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set up VBOs
|
||||||
|
glGenBuffersARB(1, &vboVertexID);
|
||||||
|
glGenBuffersARB(1, &vboTexCoordID);
|
||||||
|
glGenBuffersARB(1, &vboElementID);
|
||||||
|
|
||||||
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
||||||
|
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLint) * (2 * 8), vtxBuffer, GL_STATIC_DRAW_ARB);
|
||||||
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTexCoordID);
|
||||||
|
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLfloat) * (2 * 8), texCoordBuffer, GL_STATIC_DRAW_ARB);
|
||||||
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
||||||
|
|
||||||
|
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vboElementID);
|
||||||
|
glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, sizeof(GLubyte) * 12, vtxIndexBuffer, GL_STATIC_DRAW_ARB);
|
||||||
|
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
|
||||||
|
|
||||||
// Set up VAO
|
// Set up VAO
|
||||||
isVAOSupported = ( isVBOSupported &&
|
glGenVertexArraysAPPLE(1, &vaoMainStatesID);
|
||||||
isShadersSupported &&
|
glBindVertexArrayAPPLE(vaoMainStatesID);
|
||||||
gluCheckExtension((const GLubyte *)"GL_APPLE_vertex_array_object", glExtString) );
|
|
||||||
if (isVAOSupported)
|
if (isShaderSupported)
|
||||||
{
|
{
|
||||||
glGenVertexArraysAPPLE(1, &vaoMainStatesID);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
||||||
glBindVertexArrayAPPLE(vaoMainStatesID);
|
glVertexAttribPointer(OGLVertexAttributeID_Position, 2, GL_INT, GL_FALSE, 0, 0);
|
||||||
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTexCoordID);
|
||||||
|
glVertexAttribPointer(OGLVertexAttributeID_TexCoord0, 2, GL_FLOAT, GL_FALSE, 0, 0);
|
||||||
|
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vboElementID);
|
||||||
|
|
||||||
|
glEnableVertexAttribArray(OGLVertexAttributeID_Position);
|
||||||
|
glEnableVertexAttribArray(OGLVertexAttributeID_TexCoord0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
||||||
glVertexPointer(2, GL_INT, 0, 0);
|
glVertexPointer(2, GL_INT, 0, 0);
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTexCoordID);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTexCoordID);
|
||||||
glTexCoordPointer(2, GL_FLOAT, 0, 0);
|
glTexCoordPointer(2, GL_FLOAT, 0, 0);
|
||||||
|
|
||||||
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vboElementID);
|
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vboElementID);
|
||||||
|
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
|
||||||
glBindVertexArrayAPPLE(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glBindVertexArrayAPPLE(0);
|
||||||
|
|
||||||
// Render State Setup (common to both shaders and fixed-function pipeline)
|
// Render State Setup (common to both shaders and fixed-function pipeline)
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
@ -1156,7 +1159,7 @@ enum OGLVertexAttributeID
|
||||||
glDisable(GL_STENCIL_TEST);
|
glDisable(GL_STENCIL_TEST);
|
||||||
|
|
||||||
// Set up fixed-function pipeline render states.
|
// Set up fixed-function pipeline render states.
|
||||||
if (!isShadersSupported)
|
if (!isShaderSupported)
|
||||||
{
|
{
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
glDisable(GL_LIGHTING);
|
glDisable(GL_LIGHTING);
|
||||||
|
@ -1190,74 +1193,30 @@ enum OGLVertexAttributeID
|
||||||
|
|
||||||
- (void) renderDisplayUsingDisplayMode:(const NSInteger)displayModeID
|
- (void) renderDisplayUsingDisplayMode:(const NSInteger)displayModeID
|
||||||
{
|
{
|
||||||
// Assign vertex attributes based on which OpenGL features we have.
|
// Enable vertex attributes
|
||||||
if (isVAOSupported)
|
glBindVertexArrayAPPLE(vaoMainStatesID);
|
||||||
{
|
|
||||||
glBindVertexArrayAPPLE(vaoMainStatesID);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (isVBOSupported)
|
|
||||||
{
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
|
||||||
glVertexPointer(2, GL_INT, 0, 0);
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTexCoordID);
|
|
||||||
glTexCoordPointer(2, GL_FLOAT, 0, 0);
|
|
||||||
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vboElementID);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
glVertexPointer(2, GL_INT, 0, vtxBuffer);
|
|
||||||
glTexCoordPointer(2, GL_FLOAT, 0, texCoordBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform the render.
|
// Perform the render
|
||||||
if (lastDisplayMode != displayModeID)
|
if (lastDisplayMode != displayModeID)
|
||||||
{
|
{
|
||||||
lastDisplayMode = displayModeID;
|
lastDisplayMode = displayModeID;
|
||||||
[self updateDisplayVerticesUsingDisplayMode:displayModeID orientation:currentDisplayOrientation];
|
[self updateDisplayVerticesUsingDisplayMode:displayModeID orientation:currentDisplayOrientation];
|
||||||
|
|
||||||
if (isVBOSupported)
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
||||||
{
|
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLint) * (2 * 8), vtxBuffer + vtxBufferOffset);
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
||||||
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLint) * (2 * 8), vtxBuffer + vtxBufferOffset);
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const GLsizei vtxElementCount = (displayModeID == DS_DISPLAY_TYPE_COMBO) ? 12 : 6;
|
const GLsizei vtxElementCount = (displayModeID == DS_DISPLAY_TYPE_COMBO) ? 12 : 6;
|
||||||
GLubyte *elementPointer = isVBOSupported ? 0 : vtxIndexBuffer;
|
const GLubyte *elementPointer = !(displayModeID == DS_DISPLAY_TYPE_TOUCH) ? 0 : (GLubyte *)(vtxElementCount * sizeof(GLubyte));
|
||||||
|
|
||||||
if (displayModeID == DS_DISPLAY_TYPE_TOUCH)
|
|
||||||
{
|
|
||||||
elementPointer += vtxElementCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
glBindTexture(GL_TEXTURE_2D, displayTexID);
|
glBindTexture(GL_TEXTURE_2D, displayTexID);
|
||||||
glDrawElements(GL_TRIANGLES, vtxElementCount, GL_UNSIGNED_BYTE, elementPointer);
|
glDrawElements(GL_TRIANGLES, vtxElementCount, GL_UNSIGNED_BYTE, elementPointer);
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
// Disable vertex attributes.
|
// Disable vertex attributes
|
||||||
if (isVAOSupported)
|
glBindVertexArrayAPPLE(0);
|
||||||
{
|
|
||||||
glBindVertexArrayAPPLE(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
glDisableClientState(GL_VERTEX_ARRAY);
|
|
||||||
|
|
||||||
if (isVBOSupported)
|
|
||||||
{
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
|
||||||
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) updateDisplayVerticesUsingDisplayMode:(const NSInteger)displayModeID orientation:(const NSInteger)displayOrientationID
|
- (void) updateDisplayVerticesUsingDisplayMode:(const NSInteger)displayModeID orientation:(const NSInteger)displayOrientationID
|
||||||
|
@ -1448,7 +1407,7 @@ enum OGLVertexAttributeID
|
||||||
|
|
||||||
glViewport(0, 0, rect.size.width, rect.size.height);
|
glViewport(0, 0, rect.size.width, rect.size.height);
|
||||||
|
|
||||||
if (isShadersSupported)
|
if (isShaderSupported)
|
||||||
{
|
{
|
||||||
glUniform2f(uniformViewSize, rect.size.width, rect.size.height);
|
glUniform2f(uniformViewSize, rect.size.width, rect.size.height);
|
||||||
}
|
}
|
||||||
|
@ -1470,7 +1429,7 @@ enum OGLVertexAttributeID
|
||||||
CGLLockContext(cglDisplayContext);
|
CGLLockContext(cglDisplayContext);
|
||||||
CGLSetCurrentContext(cglDisplayContext);
|
CGLSetCurrentContext(cglDisplayContext);
|
||||||
|
|
||||||
if (isShadersSupported)
|
if (isShaderSupported)
|
||||||
{
|
{
|
||||||
glUniform1f(uniformAngleDegrees, angleDegrees);
|
glUniform1f(uniformAngleDegrees, angleDegrees);
|
||||||
glUniform1f(uniformScalar, s);
|
glUniform1f(uniformScalar, s);
|
||||||
|
@ -1502,17 +1461,14 @@ enum OGLVertexAttributeID
|
||||||
lastDisplayMode = displayModeID;
|
lastDisplayMode = displayModeID;
|
||||||
[self updateDisplayVerticesUsingDisplayMode:displayModeID orientation:currentDisplayOrientation];
|
[self updateDisplayVerticesUsingDisplayMode:displayModeID orientation:currentDisplayOrientation];
|
||||||
|
|
||||||
if (isVBOSupported)
|
CGLLockContext(cglDisplayContext);
|
||||||
{
|
CGLSetCurrentContext(cglDisplayContext);
|
||||||
CGLLockContext(cglDisplayContext);
|
|
||||||
CGLSetCurrentContext(cglDisplayContext);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
||||||
|
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLint) * (2 * 8), vtxBuffer + vtxBufferOffset);
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
||||||
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLint) * (2 * 8), vtxBuffer + vtxBufferOffset);
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
CGLUnlockContext(cglDisplayContext);
|
||||||
|
|
||||||
CGLUnlockContext(cglDisplayContext);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)doBilinearOutputChanged:(BOOL)useBilinear
|
- (void)doBilinearOutputChanged:(BOOL)useBilinear
|
||||||
|
@ -1534,17 +1490,14 @@ enum OGLVertexAttributeID
|
||||||
currentDisplayOrientation = displayOrientationID;
|
currentDisplayOrientation = displayOrientationID;
|
||||||
[self updateDisplayVerticesUsingDisplayMode:lastDisplayMode orientation:displayOrientationID];
|
[self updateDisplayVerticesUsingDisplayMode:lastDisplayMode orientation:displayOrientationID];
|
||||||
|
|
||||||
if (isVBOSupported)
|
CGLLockContext(cglDisplayContext);
|
||||||
{
|
CGLSetCurrentContext(cglDisplayContext);
|
||||||
CGLLockContext(cglDisplayContext);
|
|
||||||
CGLSetCurrentContext(cglDisplayContext);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
||||||
|
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLint) * (2 * 8), vtxBuffer + vtxBufferOffset);
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
||||||
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLint) * (2 * 8), vtxBuffer + vtxBufferOffset);
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
CGLUnlockContext(cglDisplayContext);
|
||||||
|
|
||||||
CGLUnlockContext(cglDisplayContext);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) doDisplayOrderChanged:(NSInteger)displayOrderID
|
- (void) doDisplayOrderChanged:(NSInteger)displayOrderID
|
||||||
|
@ -1561,12 +1514,9 @@ enum OGLVertexAttributeID
|
||||||
CGLLockContext(cglDisplayContext);
|
CGLLockContext(cglDisplayContext);
|
||||||
CGLSetCurrentContext(cglDisplayContext);
|
CGLSetCurrentContext(cglDisplayContext);
|
||||||
|
|
||||||
if (isVBOSupported)
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
||||||
{
|
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLint) * (2 * 8), vtxBuffer + vtxBufferOffset);
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboVertexID);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
||||||
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLint) * (2 * 8), vtxBuffer + vtxBufferOffset);
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lastDisplayMode == DS_DISPLAY_TYPE_COMBO)
|
if (lastDisplayMode == DS_DISPLAY_TYPE_COMBO)
|
||||||
{
|
{
|
||||||
|
@ -1628,12 +1578,9 @@ enum OGLVertexAttributeID
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)potW, (GLsizei)potH, 0, GL_BGRA, glTexPixelFormat, glTexBack);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)potW, (GLsizei)potH, 0, GL_BGRA, glTexPixelFormat, glTexBack);
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
if (isVBOSupported)
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTexCoordID);
|
||||||
{
|
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLfloat) * (2 * 8), texCoordBuffer);
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTexCoordID);
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
||||||
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(GLfloat) * (2 * 8), texCoordBuffer);
|
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
CGLUnlockContext(cglDisplayContext);
|
CGLUnlockContext(cglDisplayContext);
|
||||||
}
|
}
|
||||||
|
@ -1692,6 +1639,9 @@ GLint SetupShaders(GLuint *programID, GLuint *vertShaderID, GLuint *fragShaderID
|
||||||
glAttachShader(*programID, *vertShaderID);
|
glAttachShader(*programID, *vertShaderID);
|
||||||
glAttachShader(*programID, *fragShaderID);
|
glAttachShader(*programID, *fragShaderID);
|
||||||
|
|
||||||
|
glBindAttribLocation(*programID, OGLVertexAttributeID_Position, "inPosition");
|
||||||
|
glBindAttribLocation(*programID, OGLVertexAttributeID_TexCoord0, "inTexCoord0");
|
||||||
|
|
||||||
glLinkProgram(*programID);
|
glLinkProgram(*programID);
|
||||||
glGetProgramiv(*programID, GL_LINK_STATUS, &shaderStatus);
|
glGetProgramiv(*programID, GL_LINK_STATUS, &shaderStatus);
|
||||||
if (shaderStatus == GL_FALSE)
|
if (shaderStatus == GL_FALSE)
|
||||||
|
|
Loading…
Reference in New Issue