2012-07-11 9 views
2

저는 이전 코드 중 일부를 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,하지만 그것은 전혀 나타나지 않습니다. 내가 보는 모든 것이 맑은 색이다. 도태 및 깊이 테스트가 꺼져 있습니다.

+0

더 많은 디버깅 작업을 수행했습니다. AMD의 GPUPerfStudio를 사용하여 glDrawElements에 의해 프리미티브가 제대로 전송되는지 확인할 수 있지만 결코 화면에 도달하지 않습니다. 나는 그 (것)들이 그것에 도달하는 것을 막을 수있는 무엇이 확실하지 않다; 모든 행렬을 검증하기 위해 최선을 다했으며 신원 투영 행렬을 사용해 보았습니다. 아무것도 작동하지 않는 것 같습니다. – blm768

+0

조각 쉐이더가 빨간색 픽셀 만 표시한다는 것을 알 수 있습니다. 그게 니가 원하는거야? – user892644

답변

0

내 문제는 초기화 코드에있는 것으로 나타났습니다. glViewport에 전달 된 초기화되지 않은 변수가있어서 0x0 뷰포트를 제공합니다.

0

것은 내가 다음과 같은 방법으로 glGetUniformLocation()를 사용했습니다 쉐이더에 유니폼을 전달할 때 :

myUniformLocation = glGetUniformLocation(program, "myUniform") 
glUniform1f(myUniformLocation, variable_value) 
+0

기본적으로 내가 사용하고있는 형식입니다. 내가 콜 추적을 편집 할 때까지 추적 된 값을 설명적인 변수 이름으로 대체하는 것을 중단했습니다. 나는 그것을 고쳐야한다. – blm768

0

로그는 glEnableVertexAttribArray 호출을 표시하지 않습니다. 그걸 잊었 니?

+0

첫 번째 프레임에서 호출되지 않은 것처럼 보입니다. 그러나 그 이후의 모든 프레임에서 호출되었습니다. 나는 그것을 고쳤다. 여전히 운이 없다. – blm768