Доброе время суток! Тут наткнулся на очень интересную статейку о том как экспортировать из 3D MAX модель в OpenGL. Адресс статьи тут, исходник тоже там: http://sites.google.com/site/orangegraphix...icle_exportanimК сожалению столкнулся с проблемкой, не получается, каким-то образом Shader Language program подключить, значение переменной равно 0. | Код | const std::string vs = " #version 130\n"\ "\t precision highp float;\n"\ "\t uniform mat4x4 modelViewProjection;\n"\ "\t in vec4 vPos;\n"\ "\t in vec2 vTexCoord;\n"\ "\t out vec2 tc;\n"\ "\t void main() {\n"\ "\t\t tc = vTexCoord;\n"\ "\t\t gl_Position = modelViewProjection * vPos;\n"\ "\t }\n"; const std::string fs = " #version 130\n"\ "\t precision highp float;\n"\ "\t uniform sampler2D diffuse;\n"\ "\t in vec2 tc;\n"\ "\t out vec4 fragColor;\n"\ "\t void main() {\n"\ "\t fragColor = texture(diffuse, tc);\n"\ "\t }\n";
Log_Normal( "Try to compile such shader:\nVertex Program:\n\t" + vs + "Fragment Program:\n\t" + fs ); //Tут ошибка GLhandleARB program = OpenGL_3::CreateGLSLProgram( vs, fs ); //program = 0 ????????????? if ( NULL == program ) { Log_Error( "Compilation failed... Exiting..." ); exit( 1 ); } Log_Normal( "Compilation ok!" );
|
Описание функции Создания GLSL программы | Код | GLhandleARB OpenGL_3::CreateGLSLProgram( const std::string& vs, const std::string& fs ) { GLhandleARB program = glext::glCreateProgramObjectARB(); if ( !program ) return NULL;
GLhandleARB vertexProgram = glext::glCreateShaderObjectARB( GL_VERTEX_SHADER ); GLhandleARB fragmentProgram = glext::glCreateShaderObjectARB( GL_FRAGMENT_SHADER );
const char* data = vs.c_str(); int len = (int)vs.length(), compiled; glext::glShaderSourceARB( vertexProgram, 1, &data, &len ); glext::glCompileShaderARB( vertexProgram ); glext::glGetObjectParameterivARB ( vertexProgram, GL_OBJECT_COMPILE_STATUS_ARB, &compiled ); if ( !CheckForGLSLErrors( vertexProgram ) || !compiled ) { glext::glDeleteObjectARB( vertexProgram ); glext::glDeleteObjectARB( fragmentProgram ); glext::glDeleteObjectARB( program ); return NULL; } glext::glAttachObjectARB( program, vertexProgram ); if ( !CheckForGLSLErrors( program ) ) { glext::glDeleteObjectARB( vertexProgram ); glext::glDeleteObjectARB( fragmentProgram ); glext::glDeleteObjectARB( program ); return NULL; }
data = fs.c_str(); len = (int)fs.length(); glext::glShaderSourceARB( fragmentProgram, 1, &data, &len ); glext::glCompileShaderARB( fragmentProgram ); glext::glGetObjectParameterivARB ( fragmentProgram, GL_OBJECT_COMPILE_STATUS_ARB, &compiled ); if ( !CheckForGLSLErrors( fragmentProgram ) || !compiled ) { glext::glDeleteObjectARB( vertexProgram ); glext::glDeleteObjectARB( fragmentProgram ); glext::glDeleteObjectARB( program ); return NULL; } glext::glAttachObjectARB( program, fragmentProgram );
glext::glLinkProgramARB( program ); glext::glGetObjectParameterivARB( program, GL_OBJECT_LINK_STATUS_ARB, &compiled ); if ( !compiled || !CheckForGLSLErrors( program ) ) { glext::glDeleteObjectARB( vertexProgram ); glext::glDeleteObjectARB( fragmentProgram ); glext::glDeleteObjectARB( program ); return NULL; }
glext::glDeleteObjectARB( vertexProgram ); glext::glDeleteObjectARB( fragmentProgram );
CheckForGLSLErrors( program );
return program; }
|
glext.h | Код | typedef unsigned int GLhandleARB; /* shader object handle */
|
В чем проблема? Не подскажите?
--------------------
В любых делах при максимуме сложности подход к проблеме всё-таки один! Желание - это множество возможностей, а нежелание - это множество причин !!!
|