Ignore:
Timestamp:
Feb 18, 2011, 1:09:36 AM (10 years ago)
Author:
sam
Message:

Experimental GL mode works!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/scene.cpp

    r665 r666  
    149149
    150150#if LOL_EXPERIMENTAL
    151     GLuint uni;
     151    GLuint uni, attr_pos, attr_tex;
    152152    uni = stdshader->GetUniformLocation("model_matrix");
     153    attr_pos = stdshader->GetAttribLocation("in_Position");
     154    attr_tex = stdshader->GetAttribLocation("in_TexCoord");
     155
    153156    glUniformMatrix4fv(uni, 1, GL_FALSE, &model_matrix[0][0]);
    154 
    155     float *vertices = new float[18];
    156     vertices[0] = 0.0f; vertices[1] = 480.0f; vertices[2] = 0.0f;
    157     vertices[3] = 640.0f; vertices[4] = 480.0f; vertices[5] = 0.0f;
    158     vertices[6] = 0.0f; vertices[7] = 0.0f; vertices[8] = 0.0f;
    159 
    160     vertices[9] = 640.0f; vertices[10] = 0.0f; vertices[11] = 0.0f;
    161     vertices[12] = 0.0f; vertices[13] = 0.0f; vertices[14] = 0.0f;
    162     vertices[15] = 640.0f; vertices[16] = 480.0f; vertices[17] = 0.0f;
    163 
    164     const GLfloat colors[6][3] = {
    165     {  0.0,  0.0,  1.0  },
    166     {  1.0,  0.0,  0.0  },
    167     {  0.0,  1.0,  0.0  },
    168     {  1.0,  1.0,  0.0  },
    169     {  0.0,  1.0,  0.0  },
    170     {  1.0,  0.0,  0.0  } };
    171 
    172     const GLfloat tex[6][2] = {
    173     {  0.0,  0.0  },
    174     {  1.0,  0.0  },
    175     {  0.0,  1.0  },
    176     {  1.0,  1.0  },
    177     {  0.0,  1.0  },
    178     {  1.0,  0.0  } };
    179 
    180     GLuint vao, vbo[3], attr;
    181 
    182     glGenVertexArrays(1, &vao);
    183     glBindVertexArray(vao);
    184     glGenBuffers(3, &vbo[0]);
    185 
    186     attr = stdshader->GetAttribLocation("in_Position");
    187     glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
    188     glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), vertices, GL_STATIC_DRAW);
    189     glVertexAttribPointer(attr, 3, GL_FLOAT, GL_FALSE, 0, 0);
    190     glEnableVertexAttribArray(attr);
    191 
    192     attr = stdshader->GetAttribLocation("in_Color");
    193     glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
    194     glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), colors, GL_STATIC_DRAW);
    195     glVertexAttribPointer(attr, 3, GL_FLOAT, GL_FALSE, 0, 0);
    196     glEnableVertexAttribArray(attr);
    197 
    198     attr = stdshader->GetAttribLocation("in_TexCoord");
    199     glBindBuffer(GL_ARRAY_BUFFER, vbo[2]);
    200     glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), tex, GL_STATIC_DRAW);
    201     glVertexAttribPointer(attr, 2, GL_FLOAT, GL_FALSE, 0, 0);
    202     glEnableVertexAttribArray(attr);
    203 
    204     delete[] vertices;
    205 
    206     stdshader->Bind();
    207     glBindVertexArray(vao);
    208     Tiler::Bind(1 << 16);
    209     glDrawArrays(GL_TRIANGLES, 0, 6);
    210     glBindVertexArray(0);
    211 
    212 #else
    213157    glEnable(GL_DEPTH_TEST);
    214158    glDepthFunc(GL_LEQUAL);
     
    217161    glEnable(GL_BLEND);
    218162    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     163#else
     164    glEnable(GL_DEPTH_TEST);
     165    glDepthFunc(GL_LEQUAL);
     166    glEnable(GL_ALPHA_TEST);
     167    glAlphaFunc(GL_GEQUAL, 0.01f);
     168    glEnable(GL_BLEND);
     169    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    219170
    220171    glLoadIdentity();
    221172    glMultMatrixf(&model_matrix[0][0]);
     173#endif
    222174
    223175    for (int buf = 0, i = 0, n; i < data->ntiles; i = n, buf += 2)
     
    247199        }
    248200
     201#if LOL_EXPERIMENTAL
     202        GLuint vao, vbo[2], attr;
     203
     204        glGenVertexArrays(1, &vao);
     205        glBindVertexArray(vao);
     206        glGenBuffers(2, &vbo[0]);
     207
     208        glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
     209        glBufferData(GL_ARRAY_BUFFER, 18 * (n - i) * sizeof(GLfloat), vertex, GL_STATIC_DRAW);
     210        glVertexAttribPointer(attr_pos, 3, GL_FLOAT, GL_FALSE, 0, 0);
     211        glEnableVertexAttribArray(attr_pos);
     212
     213        glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
     214        glBufferData(GL_ARRAY_BUFFER, 12 * (n - i) * sizeof(GLfloat), texture, GL_STATIC_DRAW);
     215        glVertexAttribPointer(attr_tex, 2, GL_FLOAT, GL_FALSE, 0, 0);
     216        glEnableVertexAttribArray(attr_tex);
     217
     218        stdshader->Bind();
     219#else
    249220        glEnableClientState(GL_VERTEX_ARRAY);
    250221        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     
    259230                     texture, GL_DYNAMIC_DRAW);
    260231        glTexCoordPointer(2, GL_FLOAT, 0, NULL);
     232#endif
    261233
    262234        Tiler::Bind(data->tiles[i].code);
    263235        glDrawArrays(GL_TRIANGLES, 0, (n - i) * 6);
    264236
     237#if LOL_EXPERIMENTAL
     238        glBindVertexArray(0);
     239#else
    265240        glDisableClientState(GL_VERTEX_ARRAY);
    266241        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
     242#endif
    267243
    268244        free(vertex);
    269245        free(texture);
    270246    }
    271 #endif
    272247
    273248    free(data->tiles);
Note: See TracChangeset for help on using the changeset viewer.