저는 이전 코드 중 일부를 OpenGL 3으로 변환했습니다. 대부분의 기능을 작동 시켰습니다. 모든 VAOs, VBOs 등은 OpenGL 디버깅 프로그램에 의해 검증 된대로 정상적으로 작동하고 있으며 쉐이더는 정상적으로 컴파일되지만 아무 것도 화면에 표시되지 않습니다. 투영 행렬이 음수 Z 좌표를 양수로 변환해야하는지 확실하지는 않지만 모든 행렬은 잘되어야한다고 생각합니다. 내가 시도한 모든 코드 샘플은 그러한 행렬을 생성합니다. 여기 내 쉐이더는 다음과 같습니다OpenGL 3 프로그램 빈 화면
버텍스 쉐이더 :
#version 330
uniform mat4 modelview;
uniform mat4 projection;
in vec4 position;
in vec4 normal;
in vec4 texCoord;
void main() {
gl_Position = projection * modelview * position;
}
조각 쉐이더 :
#version 330
out vec4 fragColor;
void main() {
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
내 코드가 복잡하다, 그래서 난 그냥이 수정 게시 glIntercept의 통화 기록의 버전을 주석 수 있습니다 나는 C에 직접 마주하는면이있어
//Create shaders
glCreateShader(GL_VERTEX_SHADER)=1
glShaderSource(1,1,vertShaderText,vertShaderTextLen)
glCompileShader(1)
glGetShaderiv(1,GL_COMPILE_STATUS,buf)
glCreateShader(GL_FRAGMENT_SHADER)=2
glShaderSource(2,1,fragShaderText,fragShaderTextLen)
glCompileShader(2)
glGetShaderiv(2,GL_COMPILE_STATUS,buf)
glCreateProgram()=3
glAttachShader(3,1)
glAttachShader(3,2)
glLinkProgram(3)
glGetProgramiv(3,GL_LINK_STATUS,buf)
//Find uniform/attribute locations
//Extra glUseProgram() calls are for safety.
glGetUniformLocation(3,"modelview")=0
glUseProgram(3)
glGetUniformLocation(3,"projection")=1
glUseProgram(3)
glGetAttribLocation(3,"position")=0
glUseProgram(3)
glGetAttribLocation(3,"normal")=-1
glUseProgram(3)
glGetAttribLocation(3,"texCoord")=-1
//Create a texture; probably irrelevant to this code
glGenTextures(1,texId)
glBindTexture(GL_TEXTURE_2D,1)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,256,256,0,GL_RGBA,GL_UNSIGNED_BYTE,texData)
glGenTextures(1,01DD275C)
//Create VAO, VBO
glGenVertexArrays(1,vaoId)
glBindVertexArray(1)
glGenBuffers(1,bufId)
glBindBuffer(GL_ARRAY_BUFFER,1)
//Redundant call; actual data set later
glBufferData(GL_ARRAY_BUFFER,0,00000000,GL_STATIC_DRAW)
glGenBuffers(1,indexBufId)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,4)
glBufferData(GL_ELEMENT_ARRAY_BUFFER,0,00000000,GL_STATIC_DRAW)
//Set up buffer data
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,4)
glBufferData(GL_ELEMENT_ARRAY_BUFFER,96,indexData,GL_STATIC_DRAW)
glBindBuffer(GL_ARRAY_BUFFER,1)
glBufferData(GL_ARRAY_BUFFER, 48,01DC3D00,GL_STATIC_DRAW)
//Start drawing
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
glUseProgram(3)
glUseProgram(3)
//Modelview
glUniformMatrix4fv(modelviewLocation,1,false,[1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-6.000000,1.000000])
glUseProgram(3)
//Projection
glUniformMatrix4fv(projectionLocation,1,false,[0.200000,0.000000,0.000000,0.000000,0.000000,0.150000,0.000000,0.000000,0.000000,0.000000,-1.000200,-1.000000,0.000000,0.000000,-0.200020,0.000000])
//Bind VAO, VBOs, and attribute positions
glBindVertexArray(1)
glBindBuffer(GL_ARRAY_BUFFER,1)
glVertexAttribPointer(positionAttributeLocation,3,GL_FLOAT,false,12,00000000)
glEnableVertexAttribArray(positionAttributeLocation)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,4)
glDrawElements(GL_TRIANGLES,24,GL_UNSIGNED_INT,00000000) GLSL=3 Textures[ (0,2) ]
glDisableVertexAttribArray(0)
:, 이는 모든 관련 통화를한다 amera,하지만 그것은 전혀 나타나지 않습니다. 내가 보는 모든 것이 맑은 색이다. 도태 및 깊이 테스트가 꺼져 있습니다.
더 많은 디버깅 작업을 수행했습니다. AMD의 GPUPerfStudio를 사용하여 glDrawElements에 의해 프리미티브가 제대로 전송되는지 확인할 수 있지만 결코 화면에 도달하지 않습니다. 나는 그 (것)들이 그것에 도달하는 것을 막을 수있는 무엇이 확실하지 않다; 모든 행렬을 검증하기 위해 최선을 다했으며 신원 투영 행렬을 사용해 보았습니다. 아무것도 작동하지 않는 것 같습니다. – blm768
조각 쉐이더가 빨간색 픽셀 만 표시한다는 것을 알 수 있습니다. 그게 니가 원하는거야? – user892644