Changeset 779


Ignore:
Timestamp:
Jun 14, 2011, 1:54:40 AM (10 years ago)
Author:
sam
Message:

debug: add GLSL 1.20 and 1.30 shaders to the debug quad.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/debugquad.cpp

    r777 r779  
    2929 */
    3030
    31 #define NUM_SHADERS 4
     31#define NUM_ARRAYS 2
     32#define NUM_BUFFERS 6
     33#define NUM_ATTRS 6
     34#define NUM_SHADERS 6
     35#define NUM_TEXTURES 1
    3236
    3337class DebugQuadData
     
    4044    int initialised;
    4145    float time;
    42     GLuint buflist[3];
     46    GLuint array[NUM_ARRAYS];
     47    GLuint buffer[NUM_BUFFERS];
    4348    Shader *shader[NUM_SHADERS];
    44     GLuint texlist[1];
     49    GLuint attr[NUM_ATTRS];
     50    GLuint texture[NUM_TEXTURES];
    4551    uint8_t image[1][32 * 32 * 4];
    4652};
     
    7278    if (!data->initialised && !IsDestroying())
    7379    {
     80        glGenVertexArrays(NUM_ARRAYS, data->array);
     81        glGenBuffers(NUM_BUFFERS, data->buffer);
    7482#if 0
    75         glGenBuffers(3, data->buflist);
    7683
    7784        static char const *vertexshader =
     
    100107            "}\n";
    101108        data->shader[0] = Shader::Create(vertexshader, fragmentshader);
    102         glGenTextures(1, data->texlist);
     109        glGenTextures(1, data->texture);
    103110#endif
    104111
    105112        /* Checkerboard texture */
    106113        glEnable(GL_TEXTURE_2D);
    107         glBindTexture(GL_TEXTURE_2D, data->texlist[0]);
     114        glBindTexture(GL_TEXTURE_2D, data->texture[0]);
    108115        for (int j = 0; j < 32; j++)
    109116            for (int i = 0; i < 32; i++)
     
    121128        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    122129
    123         /* Quad #4: create texture in fragment shader */
     130        /* Quad #4: create texture in 1.10 fragment shader */
    124131        data->shader[0] = Shader::Create(
    125             "#version 130\n"
    126             "in vec2 in_Vertex;"
    127             "void main()"
    128             "{"
    129             "    gl_Position = vec4(in_Vertex, 0.0, 1.0);"
     132            "#version 110\n"
     133            "void main()"
     134            "{"
     135            "    gl_Position = gl_Vertex;"
    130136            "}",
    131137
    132             "#version 130\n"
     138            "#version 110\n"
    133139            "void main()"
    134140            "{"
     
    139145            "}");
    140146
    141         /* Quad #5: pass color from vertex shader to fragment shader */
     147        /* Quad #5: pass color from 1.10 vertex shader to fragment shader */
    142148        data->shader[1] = Shader::Create(
    143             "#version 130\n"
    144             "in vec2 in_Vertex;"
    145             "in vec2 in_MultiTexCoord0;"
     149            "#version 110\n"
    146150            "varying vec4 pass_Color;"
    147151            "void main()"
    148152            "{"
    149             "    float r = in_MultiTexCoord0.x;"
    150             "    float g = in_MultiTexCoord0.y;"
     153            "    float r = gl_MultiTexCoord0.x;"
     154            "    float g = gl_MultiTexCoord0.y;"
    151155            "    pass_Color = vec4(1.0 - r, 1.0 - g, r, 1.0);"
    152             "    gl_Position = vec4(in_Vertex, 0.0, 1.0);"
     156            "    gl_Position = gl_Vertex;"
    153157            "}",
    154158
    155             "#version 130\n"
     159            "#version 110\n"
    156160            "varying vec4 pass_Color;"
    157161            "void main()"
     
    160164            "}");
    161165
    162         /* Quad #6: apply texture in fragment shader */
     166        /* Quad #6: apply texture in 1.10 fragment shader */
    163167        data->shader[2] = Shader::Create(
    164             "#version 130\n"
    165             "in vec2 in_Vertex;"
    166             "in vec2 in_MultiTexCoord0;"
    167             "void main()"
    168             "{"
    169             "    gl_TexCoord[0] = vec4(in_MultiTexCoord0, 0.0, 0.0);"
    170             "    gl_Position = vec4(in_Vertex, 0.0, 1.0);"
     168            "#version 110\n"
     169            "void main()"
     170            "{"
     171            "    gl_TexCoord[0] = gl_MultiTexCoord0;"
     172            "    gl_Position = gl_Vertex;"
    171173            "}",
    172174
    173             "#version 130\n"
     175            "#version 110\n"
    174176            "uniform sampler2D tex;"
    175177            "void main()"
     
    178180            "}");
    179181
    180         /* Quad #8: vertex buffer, apply texture in fragment shader */
     182        /* Quad #8: vertex buffer, apply texture in 1.10 fragment shader */
    181183        data->shader[3] = Shader::Create(
    182             "#version 130\n"
    183             "in vec2 in_Vertex;"
    184             "in vec2 in_MultiTexCoord0;"
    185             "in vec4 in_Color;"
     184            "#version 110\n"
    186185            "varying vec4 pass_Color;"
    187186            "void main()"
    188187            "{"
    189             "    gl_TexCoord[0] = vec4(in_MultiTexCoord0, 0.0, 0.0);"
    190             "    pass_Color = in_Color;"
    191             "    gl_Position = vec4(in_Vertex, 0.0, 1.0);"
     188            "    gl_TexCoord[0] = gl_MultiTexCoord0;"
     189            "    pass_Color = gl_Color;"
     190            "    gl_Position = gl_Vertex;"
    192191            "}",
    193192
    194             "#version 130\n"
     193            "#version 110\n"
    195194            "varying vec4 pass_Color;"
    196195            "uniform sampler2D tex;"
     
    201200            "}");
    202201
     202        /* Quad #9: vertex buffer, apply texture and color in 1.20 shader */
     203        data->shader[4] = Shader::Create(
     204            "#version 120\n"
     205            "attribute vec3 in_Vertex;"
     206            "attribute vec3 in_Color;"
     207            "attribute vec2 in_MultiTexCoord0;"
     208            "varying vec4 pass_Color;"
     209            "void main()"
     210            "{"
     211            "    gl_TexCoord[0] = vec4(in_MultiTexCoord0, 0.0, 0.0);"
     212            "    pass_Color = vec4(in_Color, 1.0);"
     213            "    gl_Position = vec4(in_Vertex, 1.0);"
     214            "}",
     215
     216            "#version 120\n"
     217            "varying vec4 pass_Color;"
     218            "uniform sampler2D tex;"
     219            "void main()"
     220            "{"
     221            "    vec4 tmp = texture2D(tex, gl_TexCoord[0].xy * 0.25);"
     222            "    gl_FragColor = vec4(abs(tmp.xyz - pass_Color.xyz), 1.0);"
     223            "}");
     224        data->attr[0] = data->shader[4]->GetAttribLocation("in_Vertex");
     225        data->attr[1] = data->shader[4]->GetAttribLocation("in_Color");
     226        data->attr[2] = data->shader[4]->GetAttribLocation("in_MultiTexCoord0");
     227
     228        /* Quad #10: vertex buffer, apply texture and color in 1.30 shader */
     229        data->shader[5] = Shader::Create(
     230            "#version 130\n"
     231            "in vec3 in_Vertex;"
     232            "in vec3 in_Color;"
     233            "in vec2 in_MultiTexCoord0;"
     234            "out vec4 pass_Color;"
     235            "void main()"
     236            "{"
     237            "    gl_TexCoord[0] = vec4(in_MultiTexCoord0, 0.0, 0.0);"
     238            "    pass_Color = vec4(in_Color, 1.0);"
     239            "    gl_Position = vec4(in_Vertex, 1.0);"
     240            "}",
     241
     242            "#version 130\n"
     243            "in vec4 pass_Color;"
     244            "uniform sampler2D tex;"
     245            "void main()"
     246            "{"
     247            "    vec4 tmp = texture2D(tex, gl_TexCoord[0].xy * 0.25);"
     248            "    gl_FragColor = vec4(abs(tmp.xyz - pass_Color.xyz), 1.0);"
     249            "}");
     250        data->attr[3] = data->shader[4]->GetAttribLocation("in_Vertex");
     251        data->attr[4] = data->shader[4]->GetAttribLocation("in_Color");
     252        data->attr[5] = data->shader[4]->GetAttribLocation("in_MultiTexCoord0");
    203253
    204254        data->initialised = 1;
     
    206256    else if (data->initialised && IsDestroying())
    207257    {
    208 #if 0
    209         glDeleteBuffers(3, data->buflist);
    210 #endif
     258        glDeleteVertexArrays(NUM_ARRAYS, data->array);
     259        glDeleteBuffers(NUM_BUFFERS, data->buffer);
    211260        Shader::Destroy(data->shader[0]);
    212261        Shader::Destroy(data->shader[1]);
    213262        Shader::Destroy(data->shader[2]);
    214263        Shader::Destroy(data->shader[3]);
    215         glDeleteTextures(1, data->texlist);
     264        glDeleteTextures(NUM_TEXTURES, data->texture);
    216265
    217266        data->initialised = 0;
     
    257306
    258307    glActiveTexture(GL_TEXTURE0);
    259     glBindTexture(GL_TEXTURE_2D, data->texlist[0]);
     308    glBindTexture(GL_TEXTURE_2D, data->texture[0]);
    260309
    261310    glBindBuffer(GL_ARRAY_BUFFER, data->buflist[0]);
     
    289338    /* Bind texture */
    290339    glActiveTexture(GL_TEXTURE0);
    291     glBindTexture(GL_TEXTURE_2D, data->texlist[0]);
     340    glBindTexture(GL_TEXTURE_2D, data->texture[0]);
    292341
    293342    glBindBuffer(GL_ARRAY_BUFFER, data->buflist[0]);
     
    323372
    324373    /* Prepare our quad coordinates */
    325     vec2i const layout(3, 3);
     374    vec2i const layout(4, 3);
    326375    data->step = vec2(2.0f, -2.0f) / (3 * layout + vec2i(1));
    327376    data->orig = vec2(-1.0f, 1.0f) + data->step;
     
    374423    /* Quad #3: textured quad */
    375424    glEnable(GL_TEXTURE_2D);
    376     glBindTexture(GL_TEXTURE_2D, data->texlist[0]);
     425    glBindTexture(GL_TEXTURE_2D, data->texture[0]);
    377426    glColor3f(1.0f, 1.0f, 1.0f);
    378427    glBegin(GL_TRIANGLES);
     
    437486    glColor3f(0.0f, 1.0f, 1.0f);
    438487    glEnable(GL_TEXTURE_2D);
    439     glBindTexture(GL_TEXTURE_2D, data->texlist[0]);
     488    glBindTexture(GL_TEXTURE_2D, data->texture[0]);
    440489    glBegin(GL_TRIANGLES);
    441490        glTexCoord2f(f1, f3);
     
    475524    glDisableClientState(GL_VERTEX_ARRAY);
    476525    glDisableClientState(GL_COLOR_ARRAY);
     526    glUseProgram(0);
    477527
    478528    Advance();
     
    499549    glDisableClientState(GL_COLOR_ARRAY);
    500550    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
     551    glUseProgram(0);
     552
     553    Advance();
     554
     555    /* Quad #9: vertex buffer, apply texture and color in 1.20 shader */
     556    data->shader[4]->Bind();
     557    GLfloat const vertices3[] = { data->aa.x, data->bb.y, 0.0f,
     558                                  data->bb.x, data->bb.y, 0.0f,
     559                                  data->bb.x, data->aa.y, 0.0f,
     560                                  data->bb.x, data->aa.y, 0.0f,
     561                                  data->aa.x, data->aa.y, 0.0f,
     562                                  data->aa.x, data->bb.y, 0.0f };
     563
     564    glBindVertexArray(data->array[0]);
     565
     566    glBindBuffer(GL_ARRAY_BUFFER, data->buffer[0]);
     567    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices3), vertices3,
     568                 GL_DYNAMIC_DRAW);
     569    glVertexAttribPointer(data->attr[0], 3, GL_FLOAT, GL_FALSE, 0, 0);
     570    glEnableVertexAttribArray(data->attr[0]);
     571
     572    glBindBuffer(GL_ARRAY_BUFFER, data->buffer[1]);
     573    glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors,
     574                 GL_DYNAMIC_DRAW);
     575    glVertexAttribPointer(data->attr[1], 3, GL_FLOAT, GL_FALSE, 0, 0);
     576    glEnableVertexAttribArray(data->attr[1]);
     577
     578    glBindBuffer(GL_ARRAY_BUFFER, data->buffer[2]);
     579    glBufferData(GL_ARRAY_BUFFER, sizeof(texcoords), texcoords,
     580                 GL_DYNAMIC_DRAW);
     581    glVertexAttribPointer(data->attr[2], 2, GL_FLOAT, GL_FALSE, 0, 0);
     582    glEnableVertexAttribArray(data->attr[2]);
     583
     584    glDrawArrays(GL_TRIANGLES, 0, 6);
     585    glBindVertexArray(0);
     586
     587    glDisableVertexAttribArray(data->attr[0]);
     588    glDisableVertexAttribArray(data->attr[1]);
     589    glDisableVertexAttribArray(data->attr[2]);
     590    glUseProgram(0);
     591
     592    Advance();
     593
     594    /* Quad #10: vertex buffer, apply texture and color in 1.30 shader */
     595    data->shader[5]->Bind();
     596    GLfloat const vertices4[] = { data->aa.x, data->bb.y, 0.0f,
     597                                  data->bb.x, data->bb.y, 0.0f,
     598                                  data->bb.x, data->aa.y, 0.0f,
     599                                  data->bb.x, data->aa.y, 0.0f,
     600                                  data->aa.x, data->aa.y, 0.0f,
     601                                  data->aa.x, data->bb.y, 0.0f };
     602
     603    glBindVertexArray(data->array[1]);
     604
     605    glBindBuffer(GL_ARRAY_BUFFER, data->buffer[3]);
     606    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices4), vertices4,
     607                 GL_DYNAMIC_DRAW);
     608    glVertexAttribPointer(data->attr[3], 3, GL_FLOAT, GL_FALSE, 0, 0);
     609    glEnableVertexAttribArray(data->attr[3]);
     610
     611    glBindBuffer(GL_ARRAY_BUFFER, data->buffer[4]);
     612    glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors,
     613                 GL_DYNAMIC_DRAW);
     614    glVertexAttribPointer(data->attr[4], 3, GL_FLOAT, GL_FALSE, 0, 0);
     615    glEnableVertexAttribArray(data->attr[4]);
     616
     617    glBindBuffer(GL_ARRAY_BUFFER, data->buffer[5]);
     618    glBufferData(GL_ARRAY_BUFFER, sizeof(texcoords), texcoords,
     619                 GL_DYNAMIC_DRAW);
     620    glVertexAttribPointer(data->attr[5], 2, GL_FLOAT, GL_FALSE, 0, 0);
     621    glEnableVertexAttribArray(data->attr[5]);
     622
     623    glDrawArrays(GL_TRIANGLES, 0, 6);
     624    glBindVertexArray(0);
     625
     626    glDisableVertexAttribArray(data->attr[3]);
     627    glDisableVertexAttribArray(data->attr[4]);
     628    glDisableVertexAttribArray(data->attr[5]);
     629    glUseProgram(0);
    501630
    502631    Advance();
Note: See TracChangeset for help on using the changeset viewer.