Changeset 861


Ignore:
Timestamp:
Aug 25, 2011, 2:30:39 PM (8 years ago)
Author:
sam
Message:

ps3: port the dithering code to Cg. It does not work because subscripting
with runtime variables is only valid for arrays of texture samples.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gradient.cpp

    r860 r861  
    6969            "#version 130\n"
    7070            "\n"
    71 #if defined HAVE_GLES_2X
    72             "attribute vec3 in_Vertex;\n"
    73             "attribute vec4 in_Color;\n"
    74             "varying vec4 pass_Color;\n"
    75 #else
    7671            "in vec3 in_Vertex;\n"
    7772            "in vec4 in_Color;\n"
    7873            "out vec4 pass_Color;\n"
    79 #endif
     74            "\n"
    8075            "uniform mat4 proj_matrix;\n"
    8176            "uniform mat4 view_matrix;\n"
     
    8681            "    gl_Position = proj_matrix * view_matrix * model_matrix"
    8782            "                * vec4(in_Vertex, 1.0);\n"
    88 //"gl_Position = vec4(in_Vertex, 1.0);\n"
    89 #if defined HAVE_GLES_2X
    9083            "    pass_Color = in_Color;\n"
    91             //"    pass_Color = vec4(in_Color, 1.0);\n"
    92 #else
    93             "    pass_Color = in_Color;\n"
    94             //"    pass_Color = vec4(in_Color, 1.0);\n"
    95 #endif
    9684            "}\n",
    9785
     
    116104            "                     [int(mod(gl_FragCoord.y, 4.0))];\n"
    117105            "    t = (t + 0.5) / 17.0;\n"
    118             "    col.x = col.x > t ? 1.0 : 0.0;\n"
    119             "    col.y = col.y > t ? 1.0 : 0.0;\n"
    120             "    col.z = col.z > t ? 1.0 : 0.0;\n"
     106            "    col.x += fract(t - col.x) - t;\n"
     107            "    col.y += fract(t - col.y) - t;\n"
     108            "    col.z += fract(t - col.z) - t;\n"
    121109            "    gl_FragColor = col;\n"
    122110            "}\n");
     
    124112        data->shader = Shader::Create(
    125113            "void main(float4 in_Vertex : POSITION,"
    126             "          float2 in_TexCoord : TEXCOORD0,"
     114            "          float4 in_Color : COLOR,"
    127115            "          uniform float4x4 proj_matrix,"
    128116            "          uniform float4x4 view_matrix,"
    129117            "          uniform float4x4 model_matrix,"
    130             "          out float2 out_TexCoord : TEXCOORD0,"
     118            "          out float4 out_Color : COLOR,"
    131119            "          out float4 out_Position : POSITION)"
    132120            "{"
    133121            "    out_Position = mul(proj_matrix, mul(view_matrix, mul(model_matrix, in_Vertex)));"
    134             "    out_TexCoord = in_TexCoord;"
     122            "    out_Color = in_Color;"
    135123            "}",
    136124
    137             "void main(float2 in_TexCoord : TEXCOORD0,"
     125            "float4x4 bayer = float4x4( 0.0, 12.0,  3.0, 15.0,"
     126            "                           8.0,  4.0, 11.0,  7.0,"
     127            "                           2.0, 14.0,  1.0, 13.0,"
     128            "                          10.0,  6.0,  9.0,  5.0);\n"
     129            ""
     130#if 1
     131            "float4x4 cluster = float4x4(12.0,  5.0,  6.0, 13.0,"
     132            "                             4.0,  0.0,  1.0,  7.0,"
     133            "                            11.0,  3.0,  2.0,  8.0,"
     134            "                            15.0, 10.0,  9.0, 14.0);\n"
     135#endif
     136            "\n"
     137            "void main(float4 in_Color : COLOR,"
    138138            "          float4 in_FragCoord : WPOS,"
    139             "          uniform sampler2D tex,"
    140139            "          out float4 out_FragColor : COLOR)"
    141140            "{"
    142             "    float4 col = tex2D(tex, in_TexCoord);"
    143 #if 0
    144             "    float t1, t2, t3;\n"
    145             "    col.x = col.x > t1 ? 1.0 : 0.0;\n"
    146             "    col.y = col.y > t2 ? 1.0 : 0.0;\n"
    147             "    col.z = col.z > t3 ? 1.0 : 0.0;\n"
     141            "    float4 col = in_Color;"
     142#if 1
     143            "    int x = (int)in_FragCoord.x;"
     144            "    int y = (int)in_FragCoord.y;"
     145            // FIXME: we cannot address this matrix directly on the PS3
     146            "    float t = bayer[0][0];\n"
     147            "    t = (t + 0.5) / 17.0 + z - x;\n"
     148            "    col.x += frac(t - col.x) - t;\n"
     149            "    col.y += frac(t - col.y) - t;\n"
     150            "    col.z += frac(t - col.z) - t;\n"
    148151#endif
    149152            "    out_FragColor = col;"
    150153            "}");
    151154#endif
     155#if !defined __CELLOS_LV2__
    152156        glGenBuffers(2, data->bufs);
    153 #if defined HAVE_GL_2X
     157#   if defined HAVE_GL_2X
    154158        glGenVertexArrays(1, data->vaos);
     159#   endif
    155160#endif
    156161    }
     
    173178    data->shader->SetUniform(uni_mat, model_matrix);
    174179
    175 //    glEnable(GL_TEXTURE_2D);
    176 //    glEnable(GL_DEPTH_TEST);
    177 //    glDepthFunc(GL_LEQUAL);
    178 #if defined HAVE_GL_2X
    179 //    glEnable(GL_ALPHA_TEST);
    180 //    glAlphaFunc(GL_GEQUAL, 0.01f);
    181 #endif
    182 //    glEnable(GL_BLEND);
    183 //    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    184 
    185         /* Create a vertex array object */
    186 float const vertex[] = {   0.0f,   0.0f, 0.0f,
    187                          640.0f,   0.0f, 0.0f,
    188                            0.0f, 480.0f, 0.0f,
    189                            0.0f, 480.0f, 0.0f,
    190                          640.0f, 480.0f, 0.0f,
    191                          640.0f,   0.0f, 0.0f, };
    192 
    193 float const color[] = { 0.73f, 0.85f, 0.85f, 1.0f,
    194                         0.73f, 0.85f, 0.85f, 1.0f,
    195                         0.0f, 0.0f, 1.0f, 1.0f,
    196                         0.0f, 0.0f, 1.0f, 1.0f,
    197                         0.0f, 0.0f, 1.0f, 1.0f,
    198                         0.73f, 0.85f, 0.85f, 1.0f, };
    199 
    200         data->shader->Bind();
    201 
    202         /* Bind vertex, color and texture coordinate buffers */
    203 #if defined HAVE_GL_2X
    204         glBindVertexArray(data->vaos[0]);
    205 #endif
    206 #if !defined __CELLOS_LV2__ // Use cgGLEnableClientState etc.
    207         glEnableVertexAttribArray(attr_pos);
    208         glEnableVertexAttribArray(attr_col);
    209 
    210         glBindBuffer(GL_ARRAY_BUFFER, data->bufs[0]);
    211         glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat),
    212                      vertex, GL_DYNAMIC_DRAW);
    213         glVertexAttribPointer(attr_pos, 3, GL_FLOAT, GL_FALSE, 0, 0);
    214 
    215         glBindBuffer(GL_ARRAY_BUFFER, data->bufs[1]);
    216         glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(GLfloat),
    217                      color, GL_DYNAMIC_DRAW);
    218         glVertexAttribPointer(attr_col, 4, GL_FLOAT, GL_FALSE, 0, 0);
     180    float const vertex[] = {   0.0f,   0.0f, 0.0f,
     181                             640.0f,   0.0f, 0.0f,
     182                               0.0f, 480.0f, 0.0f,
     183                               0.0f, 480.0f, 0.0f,
     184                             640.0f, 480.0f, 0.0f,
     185                             640.0f,   0.0f, 0.0f, };
     186
     187    float const color[] = { 0.73f, 0.85f, 0.85f, 1.0f,
     188                            0.73f, 0.85f, 0.85f, 1.0f,
     189                            0.0f, 0.0f, 1.0f, 1.0f,
     190                            0.0f, 0.0f, 1.0f, 1.0f,
     191                            0.0f, 0.0f, 1.0f, 1.0f,
     192                            0.73f, 0.85f, 0.85f, 1.0f, };
     193
     194    data->shader->Bind();
     195
     196    /* Bind vertex, color and texture coordinate buffers */
     197#if !defined __CELLOS_LV2__
     198#   if defined HAVE_GL_2X
     199    glBindVertexArray(data->vaos[0]);
     200#   endif
     201    glEnableVertexAttribArray(attr_pos);
     202    glEnableVertexAttribArray(attr_col);
     203
     204    glBindBuffer(GL_ARRAY_BUFFER, data->bufs[0]);
     205    glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat),
     206                 vertex, GL_DYNAMIC_DRAW);
     207    glVertexAttribPointer(attr_pos, 3, GL_FLOAT, GL_FALSE, 0, 0);
     208
     209    glBindBuffer(GL_ARRAY_BUFFER, data->bufs[1]);
     210    glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(GLfloat),
     211                 color, GL_DYNAMIC_DRAW);
     212    glVertexAttribPointer(attr_col, 4, GL_FLOAT, GL_FALSE, 0, 0);
    219213#else
    220         glEnableClientState(GL_VERTEX_ARRAY);
    221         glEnableClientState(GL_COLOR_ARRAY);
    222 
    223         glVertexPointer(3, GL_FLOAT, 0, vertex);
    224         glTexCoordPointer(4, GL_FLOAT, 0, color);
    225 #endif
    226 
    227         /* Draw arrays */
    228         glDrawArrays(GL_TRIANGLES, 0, 6);
    229 
    230 #if defined HAVE_GL_2X
    231         glBindVertexArray(0);
    232 #endif
    233 #if !defined __CELLOS_LV2__ // Use cgGLEnableClientState etc.
    234         glDisableVertexAttribArray(attr_pos);
    235         glDisableVertexAttribArray(attr_col);
     214    glEnableClientState(GL_VERTEX_ARRAY);
     215    glEnableClientState(GL_COLOR_ARRAY);
     216
     217    glVertexPointer(3, GL_FLOAT, 0, vertex);
     218    glColorPointer(4, GL_FLOAT, 0, color);
     219#endif
     220
     221    /* Draw arrays */
     222    glDrawArrays(GL_TRIANGLES, 0, 6);
     223
     224#if !defined __CELLOS_LV2__
     225#   if defined HAVE_GL_2X
     226    glBindVertexArray(0);
     227#   endif
     228    glDisableVertexAttribArray(attr_pos);
     229    glDisableVertexAttribArray(attr_col);
    236230#else
    237         glDisableClientState(GL_VERTEX_ARRAY);
    238         glDisableClientState(GL_COLOR_ARRAY);
    239 #endif
    240    // END
     231    glDisableClientState(GL_VERTEX_ARRAY);
     232    glDisableClientState(GL_COLOR_ARRAY);
     233#endif
    241234}
    242235
Note: See TracChangeset for help on using the changeset viewer.