Changeset 830


Ignore:
Timestamp:
Aug 17, 2011, 5:19:55 PM (8 years ago)
Author:
sam
Message:

debug: add a debug example with a shader and a uniform matrix parameter, to
check that uniforms work properly on the PS3.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/debug/quad.cpp

    r829 r830  
    7979
    8080    drawgroup = DRAWGROUP_HUD;
     81}
     82
     83DebugQuad::~DebugQuad()
     84{
     85    delete data;
     86}
     87
     88void DebugQuad::Advance()
     89{
     90    data->aa.x += 4.0f * data->step.x;
     91    data->bb.x += 4.0f * data->step.x;
     92    if (data->bb.x > 1.0f)
     93    {
     94        data->aa.x = data->orig.x;
     95        data->bb.x = data->orig.x + 3.0f * data->step.x;
     96        data->aa.y += 4.0f * data->step.y;
     97        data->bb.y += 4.0f * data->step.y;
     98    }
    8199}
    82100
     
    144162    data->bb = data->orig + 3.0f * data->step;
    145163
    146     /* Generate a few random numbers */
    147     float f1 = 0.5f + 0.5f * sinf(0.00034f * data->time);
    148     float f2 = 0.5f + 0.5f * sinf(0.00053f * data->time + 1.0f);
    149     float f3 = 0.5f + 0.5f * sinf(0.00072f * data->time + 4.0f);
    150     float f4 = 0.5f + 0.5f * sinf(0.00091f * data->time + 8.0f);
    151 
    152     GLfloat const colors[] = { f1, f2, f3, f4, f2, f1, f3, f1, f4,
    153                                f3, f1, f4, f4, f3, f2, f1, f2, f3 };
    154     GLfloat const texcoords[] = { f1, f3, f3, f2, f2, f4,
    155                                   f2, f4, f4, f1, f1, f3 };
     164    /* These points form a [0,1][0,1] square */
     165    GLfloat points[12] = { 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f,
     166                           0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f };
     167
     168    GLfloat texcoords[12];
     169    mat4 t1 = mat4::translate(0.5f, 0.5f, 0.0f)
     170            * mat4::rotate(0.00054f * data->time, 0.0f, 0.0f, 1.0f)
     171            * mat4::translate(-0.5f, -0.5f, 0.0f);
     172    for (int i = 0; i < 6; i++)
     173    {
     174         vec4 p = t1 * vec4(points[i * 2], points[i * 2 + 1], 0.0f, 1.0f);
     175         texcoords[i * 2] = p.x;
     176         texcoords[i * 2 + 1] = p.y;
     177    }
     178
     179    GLfloat colors[18];
     180    mat4 t2 = mat4::translate(0.5f, 0.5f, 0.5f)
     181            * mat4::rotate(0.00034f * data->time, 0.0f, 0.0f, 1.0f)
     182            * mat4::rotate(0.00041f * data->time, 0.0f, 1.0f, 0.0f)
     183            * mat4::rotate(0.00057f * data->time, 1.0f, 0.0f, 0.0f)
     184            * mat4::translate(-0.5f, -0.5f, 0.0f);
     185    for (int i = 0; i < 6; i++)
     186    {
     187         vec4 p = t2 * vec4(points[i * 2], points[i * 2 + 1], 0.0f, 1.0f);
     188         colors[i * 3] = p.x;
     189         colors[i * 3 + 1] = p.y;
     190         colors[i * 3 + 2] = p.z;
     191    }
    156192
    157193    /* Cheap iterators */
     
    194230#if defined HAVE_GLBEGIN || defined USE_GLEW
    195231    glBegin(GL_TRIANGLES);
    196         glColor3f(f1, f2, f3);
    197         glVertex3f(data->aa.x, data->bb.y, 0.0f);
    198         glColor3f(f4, f2, f1);
     232        glColor3f(colors[0], colors[1], colors[2]);
     233        glVertex3f(data->aa.x, data->bb.y, 0.0f);
     234        glColor3f(colors[3], colors[4], colors[5]);
    199235        glVertex3f(data->bb.x, data->bb.y, 0.0f);
    200         glColor3f(f3, f1, f4);
    201         glVertex3f(data->bb.x, data->aa.y, 0.0f);
    202 
    203         glVertex3f(data->bb.x, data->aa.y, 0.0f);
    204         glColor3f(f4, f3, f2);
     236        glColor3f(colors[6], colors[7], colors[8]);
     237        glVertex3f(data->bb.x, data->aa.y, 0.0f);
     238
     239        glColor3f(colors[9], colors[10], colors[11]);
     240        glVertex3f(data->bb.x, data->aa.y, 0.0f);
     241        glColor3f(colors[12], colors[13], colors[14]);
    205242        glVertex3f(data->aa.x, data->aa.y, 0.0f);
    206         glColor3f(f1, f2, f3);
     243        glColor3f(colors[15], colors[16], colors[17]);
    207244        glVertex3f(data->aa.x, data->bb.y, 0.0f);
    208245    glEnd();
     
    223260    glColor3f(1.0f, 1.0f, 1.0f);
    224261    glBegin(GL_TRIANGLES);
    225         glColor3f(f1, f2, f3);
    226         glTexCoord2f(f1, f3);
    227         glVertex3f(data->aa.x, data->bb.y, 0.0f);
    228         glColor3f(f4, f2, f1);
    229         glTexCoord2f(f3, f2);
     262        glColor3f(colors[0], colors[1], colors[2]);
     263        glTexCoord2f(texcoords[0], texcoords[1]);
     264        glVertex3f(data->aa.x, data->bb.y, 0.0f);
     265        glColor3f(colors[3], colors[4], colors[5]);
     266        glTexCoord2f(texcoords[2], texcoords[3]);
    230267        glVertex3f(data->bb.x, data->bb.y, 0.0f);
    231         glColor3f(f3, f1, f4);
    232         glTexCoord2f(f2, f4);
    233         glVertex3f(data->bb.x, data->aa.y, 0.0f);
    234 
    235         glTexCoord2f(f2, f4);
    236         glVertex3f(data->bb.x, data->aa.y, 0.0f);
    237         glColor3f(f4, f3, f2);
    238         glTexCoord2f(f4, f1);
     268        glColor3f(colors[6], colors[7], colors[8]);
     269        glTexCoord2f(texcoords[4], texcoords[5]);
     270        glVertex3f(data->bb.x, data->aa.y, 0.0f);
     271
     272        glColor3f(colors[9], colors[10], colors[11]);
     273        glTexCoord2f(texcoords[6], texcoords[7]);
     274        glVertex3f(data->bb.x, data->aa.y, 0.0f);
     275        glColor3f(colors[12], colors[13], colors[14]);
     276        glTexCoord2f(texcoords[8], texcoords[9]);
    239277        glVertex3f(data->aa.x, data->aa.y, 0.0f);
    240         glColor3f(f1, f2, f3);
    241         glTexCoord2f(f1, f3);
     278        glColor3f(colors[15], colors[16], colors[17]);
     279        glTexCoord2f(texcoords[10], texcoords[11]);
    242280        glVertex3f(data->aa.x, data->bb.y, 0.0f);
    243281    glEnd();
     
    317355    glColor3f(0.0f, 1.0f, 1.0f);
    318356    glBegin(GL_TRIANGLES);
    319         glTexCoord3f(f1, f2, f3);
    320         glVertex3f(data->aa.x, data->bb.y, 0.0f);
    321         glTexCoord3f(f4, f2, f1);
     357        glTexCoord3f(colors[0], colors[1], colors[2]);
     358        glVertex3f(data->aa.x, data->bb.y, 0.0f);
     359        glTexCoord3f(colors[3], colors[4], colors[5]);
    322360        glVertex3f(data->bb.x, data->bb.y, 0.0f);
    323         glTexCoord3f(f3, f1, f4);
    324         glVertex3f(data->bb.x, data->aa.y, 0.0f);
    325 
    326         glVertex3f(data->bb.x, data->aa.y, 0.0f);
    327         glTexCoord3f(f4, f3, f2);
     361        glTexCoord3f(colors[6], colors[7], colors[8]);
     362        glVertex3f(data->bb.x, data->aa.y, 0.0f);
     363
     364        glTexCoord3f(colors[9], colors[10], colors[11]);
     365        glVertex3f(data->bb.x, data->aa.y, 0.0f);
     366        glTexCoord3f(colors[12], colors[13], colors[14]);
    328367        glVertex3f(data->aa.x, data->aa.y, 0.0f);
    329         glTexCoord3f(f1, f2, f3);
     368        glTexCoord3f(colors[15], colors[16], colors[17]);
    330369        glVertex3f(data->aa.x, data->bb.y, 0.0f);
    331370    glEnd();
     
    365404    glBindTexture(GL_TEXTURE_2D, data->texture[0]);
    366405    glBegin(GL_TRIANGLES);
    367         glTexCoord2f(f1, f3);
    368         glVertex3f(data->aa.x, data->bb.y, 0.0f);
    369         glTexCoord2f(f3, f2);
     406        glTexCoord2f(texcoords[0], texcoords[1]);
     407        glVertex3f(data->aa.x, data->bb.y, 0.0f);
     408        glTexCoord2f(texcoords[2], texcoords[3]);
    370409        glVertex3f(data->bb.x, data->bb.y, 0.0f);
    371         glTexCoord2f(f2, f4);
    372         glVertex3f(data->bb.x, data->aa.y, 0.0f);
    373 
    374         glTexCoord2f(f2, f4);
    375         glVertex3f(data->bb.x, data->aa.y, 0.0f);
    376         glTexCoord2f(f4, f1);
     410        glTexCoord2f(texcoords[4], texcoords[5]);
     411        glVertex3f(data->bb.x, data->aa.y, 0.0f);
     412
     413        glTexCoord2f(texcoords[6], texcoords[7]);
     414        glVertex3f(data->bb.x, data->aa.y, 0.0f);
     415        glTexCoord2f(texcoords[8], texcoords[9]);
    377416        glVertex3f(data->aa.x, data->aa.y, 0.0f);
    378         glTexCoord2f(f1, f3);
     417        glTexCoord2f(texcoords[10], texcoords[11]);
    379418        glVertex3f(data->aa.x, data->bb.y, 0.0f);
    380419    glEnd();
     
    607646
    608647    /*
    609      * Test #13: vertex buffer + texture & color in 1.10 fragment shader
     648     * Test #13: vertex buffer + uniform matrix for color transform in 1.10
     649     * or Cg fragment shader
     650     *
     651     * Renders a multicoloured square with varying colors.
     652     */
     653#if !defined ANDROID_NDK
     654    if (!shader[0])
     655    {
     656#if !defined __CELLOS_LV2__
     657        shader[0] = Shader::Create(
     658            "#version 110\n"
     659            "varying vec4 pass_Color;"
     660            "uniform mat4 in_Matrix;"
     661            "void main()"
     662            "{"
     663            "    gl_Position = gl_Vertex;"
     664            "    pass_Color = in_Matrix * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0);"
     665            "}",
     666
     667            "#version 110\n"
     668            "varying vec4 pass_Color;"
     669            "void main()"
     670            "{"
     671            "    gl_FragColor = pass_Color;"
     672            "}");
     673#else
     674        shader[0] = Shader::Create(
     675            "void main(float4 in_Position : POSITION,"
     676            "          float2 in_TexCoord : TEXCOORD0,"
     677            "          uniform float4x4 in_Matrix,"
     678            "          out float4 out_Color : COLOR,"
     679            "          out float4 out_Position : POSITION)"
     680            "{"
     681            "    out_Position = in_Position;"
     682            "    out_Color = mul(in_Matrix, float4(in_TexCoord, 0, 1));"
     683            "}",
     684
     685            "void main(float4 in_Color : COLOR,"
     686            "          out float4 out_FragColor : COLOR)"
     687            "{"
     688            "    out_FragColor = in_Color;"
     689            "}");
     690#endif
     691        uni[0] = shader[0]->GetUniformLocation("in_Matrix");
     692    }
     693    shader[0]->Bind();
     694    shader++;
     695#if !defined __CELLOS_LV2__
     696    glUniformMatrix4fv(uni[0], 1, GL_FALSE, &t2[0][0]);
     697#else
     698    cgGLSetMatrixParameterfc((CGparameter)(intptr_t)uni[0], &t2[0][0]);
     699#endif
     700    uni++;
     701
     702    glEnableClientState(GL_VERTEX_ARRAY);
     703    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     704
     705    glVertexPointer(3, GL_FLOAT, 0, data->GetVertexArray());
     706    glTexCoordPointer(2, GL_FLOAT, 0, points);
     707    glDrawArrays(GL_TRIANGLES, 0, 6);
     708
     709    glDisableClientState(GL_VERTEX_ARRAY);
     710    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
     711#endif
     712
     713    Advance();
     714    ResetState();
     715
     716    /*
     717     * Test #14: vertex buffer + texture & color in 1.10 fragment shader
    610718     *
    611719     * Renders a multicoloured square with varying colors xored with an
     
    680788
    681789    /*
    682      * Test #14: vertex buffer + texture & color in 1.20 fragment shader
     790     * Test #15: vertex buffer + texture & color in 1.20 fragment shader
    683791     *
    684792     * Renders a multicoloured square with varying colors xored with an
     
    750858
    751859    /*
    752      * Test #15: vertex buffer + texture & color in 1.30 fragment shader
     860     * Test #16: vertex buffer + texture & color in 1.30 fragment shader
    753861     *
    754862     * Renders a multicoloured square with varying colors xored with an
     
    861969}
    862970
    863 void DebugQuad::Advance()
    864 {
    865     data->aa.x += 4.0f * data->step.x;
    866     data->bb.x += 4.0f * data->step.x;
    867     if (data->bb.x > 1.0f)
    868     {
    869         data->aa.x = data->orig.x;
    870         data->bb.x = data->orig.x + 3.0f * data->step.x;
    871         data->aa.y += 4.0f * data->step.y;
    872         data->bb.y += 4.0f * data->step.y;
    873     }
    874 }
    875 
    876 DebugQuad::~DebugQuad()
    877 {
    878     delete data;
    879 }
    880 
    881971} /* namespace lol */
    882972
Note: See TracChangeset for help on using the changeset viewer.