2012-04-04 2 views
3

Хотите преобразовать OpenGL 1.1 в OpenGL 2.0.Преобразование OpenGL 1.1 в OpenGL 2.0

Я использую cocos2d v2.0 (фреймворк для создания 2D-игр)

+0

Вы должны связать шейдер дроу что-то. Без шейдера ничего не будет. –

ответ

2

Сначала вы должны получить ваши шейдеры в вашей программе. Вы можете скопировать шейдерный код прямо в const char *, как показано ниже, или вы можете загрузить шейдер во время выполнения из файла, который зависит от того, на каких платформах вы разрабатываете, поэтому я не буду показывать, как это сделать.

const char *vertexShader = "... Vertex Shader source ..."; 
const char *fragmentShader = "... Fragment Shader source ..."; 

Создание шейдеров как для вершинных шейдеров и пиксельного шейдера и хранить их идентификаторы:

GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); 
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); 

Здесь вы заполняете вы только что создали с вами либо данные шейдерами копии вставить в сопзЬ символ * или загружается из файла:

glShaderSource(vertexShader, 1, &vertexShader, NULL); 
glShaderSource(fragmentShader, 1, &fragmentShader, NULL); 

Тогда вы говорите программу компилировать вам шейдеры:

glCompileShader(vertexShader); 
glCompileShader(fragmentShader); 

Создать программу шейдера, который является интерфейсом для ваших шейдеров с OpenGL:

shaderProgram = glCreateProgram(); 

Приложите свои шейдеры программы шейдера:

glAttachShader(shaderProgram, vertexShader); 
glAttachShader(shaderProgram, fragmentShader); 

Ссылка программа шейдера в программу:

glLinkProgram(shaderProgram); 

Сообщите OpenGL, что вы хотите использовать созданную шейдерную программу:

glUseProgram(shaderProgram); 

Vertex Shader:

attribute vec4 a_Position; // Attribute is data send with each vertex. Position 
attribute vec2 a_TexCoord; // and texture coordinates is the example here 

uniform mat4 u_ModelViewProjMatrix; // This is sent from within your program 

varying mediump vec2 v_TexCoord; // varying means it is passed to next shader 

void main() 
{ 
    // Multiply the model view projection matrix with the vertex position 
    gl_Position = u_ModelViewProjMatrix* a_Position; 
    v_TexCoord = a_TexCoord; // Send texture coordinate data to fragment shader. 
} 

Фрагмент Shader:

precision mediump float; // Mandatory OpenGL ES float precision 

varying vec2 v_TexCoord; // Sent in from Vertex Shader 

uniform sampler2D u_Texture; // The texture to use sent from within your program. 

void main() 
{ 
    // The pixel colors are set to the texture according to texture coordinates. 
    gl_FragColor = texture2D(u_Texture, v_TexCoord); 
}