2013-03-13 4 views
0

내가 간단한 텍스처를 설정하려고 "버전 '130'이 지원되지 않습니다"발생하는 오류 : 는 FP :로드 질감 #Version을 130

uniform sampler2D colorMap; 

out vec4 vFragColor; 
smooth in vec2 vVaryingTexCoords; 


void main(void) 
    { 
    vFragColor = texture(colorMap, vVaryingTexCoords.st); 
    } 

VB : 여기

#version 130 

in vec4 vVertex; 
in vec2 vTexCoords; 

smooth out vec2 vVaryingTexCoords; 

void main(void) 
    { 
    vVaryingTexCoords = vTexCoords; 
    gl_Position = vVertex; 
    } 

는 코드입니다 로딩 :

: 여기
#ifdef linux 
#include <cstdlib> 
#endif 
#ifdef __APPLE__ 
#if IPHONE 
#include <OpenGLES/ES2/gl.h> 
#include <OpenGLES/ES2/glext.h> 
#define OPENGL_ES 
#else 
//#include "GL/glew.h" 
#import <OpenGL/glext.h> 
#include <OpenGL/gl3.h>  // Apple OpenGL haders (version depends on OS X SDK version) 
#endif 
#include <unistd.h> 
#endif 
GLuint gltLoadShaderPairWithAttributes(const char *szVertexProg, const char *szFragmentProg, ...) 
    { 
    // Temporary Shader objects 
    GLuint hVertexShader; 
    GLuint hFragmentShader; 
    GLuint hReturn = 0; 
    GLint testVal; 

    // Create shader objects 
    hVertexShader = glCreateShader(GL_VERTEX_SHADER); 
    hFragmentShader = glCreateShader(GL_FRAGMENT_SHADER); 

    // Load them. If fail clean up and return null 
    // Vertex Program 
    if(gltLoadShaderFile(szVertexProg, hVertexShader) == false) 
     { 
     glDeleteShader(hVertexShader); 
     glDeleteShader(hFragmentShader); 
     fprintf(stderr, "The shader at %s could ot be found.\n", szVertexProg); 
     return (GLuint)NULL; 
     } 

    // Fragment Program 
    if(gltLoadShaderFile(szFragmentProg, hFragmentShader) == false) 
     { 
     glDeleteShader(hVertexShader); 
     glDeleteShader(hFragmentShader); 
     fprintf(stderr,"The shader at %s could not be found.\n", szFragmentProg); 
     return (GLuint)NULL; 
     } 

    // Compile them both 
    glCompileShader(hVertexShader); 
    glCompileShader(hFragmentShader); 

    // Check for errors in vertex shader 
    glGetShaderiv(hVertexShader, GL_COMPILE_STATUS, &testVal); 
    if(testVal == GL_FALSE) 
     { 
     char infoLog[1024]; 
     glGetShaderInfoLog(hVertexShader, 1024, NULL, infoLog); 
     fprintf(stderr, "The shader at %s failed to compile with the following error:\n%s\n", szVertexProg, infoLog); 
     glDeleteShader(hVertexShader); 
     glDeleteShader(hFragmentShader); 
     return (GLuint)NULL; 
     } 

    // Check for errors in fragment shader 
    glGetShaderiv(hFragmentShader, GL_COMPILE_STATUS, &testVal); 
    if(testVal == GL_FALSE) 
     { 
     char infoLog[1024]; 
     glGetShaderInfoLog(hFragmentShader, 1024, NULL, infoLog); 
     fprintf(stderr, "The shader at %s failed to compile with the following error:\n%s\n", szFragmentProg, infoLog); 
     glDeleteShader(hVertexShader); 
     glDeleteShader(hFragmentShader); 
     return (GLuint)NULL; 
     } 

    // Create the final program object, and attach the shaders 
    hReturn = glCreateProgram(); 
    glAttachShader(hReturn, hVertexShader); 
    glAttachShader(hReturn, hFragmentShader); 


    // Now, we need to bind the attribute names to their specific locations 
    // List of attributes 
    va_list attributeList; 
    va_start(attributeList, szFragmentProg); 

    // Iterate over this argument list 
    char *szNextArg; 
    int iArgCount = va_arg(attributeList, int); // Number of attributes 
    for(int i = 0; i < iArgCount; i++) 
     { 
     int index = va_arg(attributeList, int); 
     szNextArg = va_arg(attributeList, char*); 
     glBindAttribLocation(hReturn, index, szNextArg); 
     } 
    va_end(attributeList); 

    // Attempt to link  
    glLinkProgram(hReturn); 

    // These are no longer needed 
    glDeleteShader(hVertexShader); 
    glDeleteShader(hFragmentShader); 

    // Make sure link worked too 
    glGetProgramiv(hReturn, GL_LINK_STATUS, &testVal); 
    if(testVal == GL_FALSE) 
     { 
     char infoLog[1024]; 
     glGetProgramInfoLog(hReturn, 1024, NULL, infoLog); 
     fprintf(stderr,"The programs %s and %s failed to link with the following errors:\n%s\n", 
      szVertexProg, szFragmentProg, infoLog); 
     glDeleteProgram(hReturn); 
     return (GLuint)NULL; 
     } 

    // All done, return our ready to use shader program 
    return hReturn; 
    } 

는 출력

ERROR: 0:5: '' : version '130' is not supported ERROR: 0:10: 'smooth' : syntax error syntax error

내가 틀렸어. 내가 지난 OSX 버전에있어, 그것은 반드시 1.5 GLSL를 지원 그리고 3.2 GL 공식 OpenGL을 설명을 따르

https://developer.apple.com/graphicsimaging/opengl/capabilities/index.html

을하지만 난 OpenGL을 확장자 뷰어로 확인할 때, 1.2 버전은 지원 모양입니다. glsl 1.3 지원을 가능하게하는 백도어가 필요합니까?

enter image description here

+0

'vb'란 무엇입니까? "정점 셰이더"를 의미합니까? –

+0

예, 당연히 이것은 vertex shader – user170317

답변

1

의 OpenGL 버전 3.2은 GLSL 버전 1.40와 1.50을 컴파일 할 수 있어야한다. Windows에서 대부분의 OpenGL 구현은 MacOSX에서 다양한 쉐이딩 언어 버전을 수용 할 것이므로 필요한 부분을 고수해야합니다.

+0

입니다 : https://developer.apple.com/graphicsimaging/opengl/capabilities/index.html 10.8 버전까지 1.5 glsl 버전을 지원합니다 ... – user170317

+0

@ user170317 : 나는 돈을 내지 않습니다 그 그래프에서 볼 수 없습니다. 단순히 "1.50"이라고 말합니다. 그것은 "1.10 ~ 1.50"을 말하지 않습니다. –