1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
glClearColor(0,0,0,1) // Clear color noir
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
// On commence la 3d
glEnable(GL_DEPTH_TEST)
glEnable(GL_CULL_FACE)
glCullFace(GL_FRONT)
// On bind le shader
glGetIntegerv(GL_CURRENT_PROGRAM, 0x0022EDD4)
glUseProgram(6)
// On bind la texture
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, 0x0022EDC8)
glGetUniformLocation(6, uTexture)
glActiveTexture(GL_TEXTURE0)
glBindTexture(GL_TEXTURE_2D, 2)
glUniform1i(2, 0)
// On set la matrice pour le shader
glGetUniformLocation(6, uModelView)
glUniformMatrix4fv(1, 1, FALSE, {-0.24226843, -0.85334766, 0.50477111, 0.4997234}
{-0.19957609, 0.71113509, 0.67250913, 0.66578406}
{-0.59161288, 0.10955412, -0.43357214, -0.42923644}
{14.202753, 17.656857, 35.61842, 45.262238})
// On set l'uniform uColor pour avoir du blanc
glGetUniformLocation(6, uColor)
glUniform4f(0, 1, 1, 1, 1)
// On set le VBO
glBindBuffer(GL_ARRAY_BUFFER, 1)
glVertexAttribPointer(0, 3, GL_FLOAT, FALSE, 32, 0x00000000)
glEnableVertexAttribArray(0)
glVertexAttribPointer(1, 3, GL_FLOAT, FALSE, 32, 0x0000000C)
glEnableVertexAttribArray(1)
glVertexAttribPointer(2, 2, GL_FLOAT, FALSE, 32, 0x00000018)
glEnableVertexAttribArray(2)
// On draw le mesh 3d, une belle TeaPot pleine de vertices
glDrawArrays(GL_TRIANGLES, 0, 4680)
// Ici, tout va bien, j'ai bien la TeaPot qui apparait sur fond noir.
// On passe à la 2d
glDisable(GL_DEPTH_TEST)
glDisable(GL_CULL_FACE)
glEnable(GL_BLEND)
// On active le shader
glGetIntegerv(GL_CURRENT_PROGRAM, 0x006DF3D0)
glUseProgram(9)
// bind la texture
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, 0x006DF3C4)
glGetUniformLocation(9, uTexture)
glActiveTexture(GL_TEXTURE0)
glBindTexture(GL_TEXTURE_2D, 2)
glUniform1i(1, 0)
// Set la couleur uColor
glGetUniformLocation(9, uColor)
glUniform4f(0, 1, 1, 1, 1)
// Set les vertice attributes.
// J'ai modifié mon tableau de vertice pour qu'il prenne tout l'écran par défaut :
// static const GLfloat vertices[] = {
// -1.f, 1.f, 0.f, 0.f, 0.f,
// -1.f, -1.f, 0.f, 0.f, 1.f,
// 1.f, 1.f, 0.f, 1.f, 0.f,
// 1.f, -1.f, 0.f, 1.f, 1.f
// };
glVertexAttribPointer(0, 3, GL_FLOAT, FALSE, 20, 0x004FEE38) // Le vertex attrib 0 correspond à la position
glEnableVertexAttribArray(0)
glDisableVertexAttribArray(1) // Le vertex attrib 1 correspond aux normals, inutilisé pour les sprite
glVertexAttribPointer(2, 2, GL_FLOAT, FALSE, 20, 0x004FEE44)// Le vertex attrib 2 correspond a la texcoord 0
glEnableVertexAttribArray(2)
// On draw le tout
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
// On desactive le blend
glDisable(GL_BLEND)
// Et swap buffer
wglSwapBuffers(0xFF012527)
// Oui, ici j'utilise wglSwapBuffer car mon programme tourne à la fois sous windows avec openGL 4.1 et sur un device android avec openGL ES 2.0.
// A chaque test fais sous windows, je fais le test sous le device. |
Partager