Changeset 2288


Ignore:
Timestamp:
Jan 28, 2013, 2:23:54 PM (6 years ago)
Author:
sam
Message:

gpu: allow to set array uniform values.

Location:
trunk/src/gpu
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gpu/shader.cpp

    r2216 r2288  
    380380}
    381381
     382/*
     383 * Uniform setters for scalars
     384 */
     385
    382386void Shader::SetUniform(ShaderUniform const &uni, int i)
    383387{
     
    555559#else
    556560    /* FIXME: unimplemented */
     561#endif
     562}
     563
     564/*
     565 * Uniform setters for arrays
     566 */
     567
     568void Shader::SetUniform(ShaderUniform const &uni, Array<float> const &v)
     569{
     570#if defined USE_D3D9 || defined _XBOX
     571    /* FIXME: this will not work properly because we don't know how tell DX9
     572     * it's a bunch of floats instead of vec4. */
     573    if (uni.flags & 1)
     574        g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag,
     575                                             &v[0], v.Count() / 4);
     576    if (uni.flags & 2)
     577        g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert,
     578                                              &v[0], v.Count() / 4);
     579#elif !defined __CELLOS_LV2__
     580    glUniform1fv(uni.frag, v.Count(), &v[0]);
     581#else
     582    if (uni.frag)
     583        cgGLSetParameterArray1fv((CGparameter)uni.frag,
     584                                 0, v.Count(), &v[0]);
     585    if (uni.vert)
     586        cgGLSetParameterArray1fv((CGparameter)uni.vert,
     587                                 0, v.Count(), &v[0]);
     588#endif
     589}
     590
     591void Shader::SetUniform(ShaderUniform const &uni, Array<vec2> const &v)
     592{
     593#if defined USE_D3D9 || defined _XBOX
     594    /* FIXME: this will not work properly because we don't know how tell DX9
     595     * it's a bunch of vec2 instead of vec4. */
     596    if (uni.flags & 1)
     597        g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag,
     598                                             &v[0][0], v.Count() / 2);
     599    if (uni.flags & 2)
     600        g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert,
     601                                              &v[0][0], v.Count() / 2);
     602#elif !defined __CELLOS_LV2__
     603    glUniform2fv(uni.frag, v.Count(), &v[0][0]);
     604#else
     605    if (uni.frag)
     606        cgGLSetParameterArray2fv((CGparameter)uni.frag,
     607                                 0, v.Count(), &v[0][0]);
     608    if (uni.vert)
     609        cgGLSetParameterArray2fv((CGparameter)uni.vert,
     610                                 0, v.Count(), &v[0][0]);
     611#endif
     612}
     613
     614void Shader::SetUniform(ShaderUniform const &uni, Array<vec3> const &v)
     615{
     616#if defined USE_D3D9 || defined _XBOX
     617    /* FIXME: this will not work properly because we don't know how tell DX9
     618     * it's a bunch of vec3 instead of vec4. */
     619    if (uni.flags & 1)
     620        g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag,
     621                                             &v[0][0], v.Count());
     622    if (uni.flags & 2)
     623        g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert,
     624                                              &v[0][0], v.Count());
     625#elif !defined __CELLOS_LV2__
     626    glUniform3fv(uni.frag, v.Count(), &v[0][0]);
     627#else
     628    if (uni.frag)
     629        cgGLSetParameterArray3fv((CGparameter)uni.frag,
     630                                 0, v.Count(), &v[0][0]);
     631    if (uni.vert)
     632        cgGLSetParameterArray3fv((CGparameter)uni.vert,
     633                                 0, v.Count(), &v[0][0]);
     634#endif
     635}
     636
     637void Shader::SetUniform(ShaderUniform const &uni, Array<vec4> const &v)
     638{
     639#if defined USE_D3D9 || defined _XBOX
     640    if (uni.flags & 1)
     641        g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag,
     642                                             &v[0][0], v.Count());
     643    if (uni.flags & 2)
     644        g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert,
     645                                              &v[0][0], v.Count());
     646#elif !defined __CELLOS_LV2__
     647    glUniform4fv(uni.frag, v.Count(), &v[0][0]);
     648#else
     649    if (uni.frag)
     650        cgGLSetParameterArray4fv((CGparameter)uni.frag,
     651                                 0, v.Count(), &v[0][0]);
     652    if (uni.vert)
     653        cgGLSetParameterArray4fv((CGparameter)uni.vert,
     654                                 0, v.Count(), &v[0][0]);
    557655#endif
    558656}
  • trunk/src/gpu/shader.h

    r2183 r2288  
    8585    void SetUniform(ShaderUniform const &uni, ShaderTexture tex, int index);
    8686
     87    void SetUniform(ShaderUniform const &uni, Array<float> const &v);
     88    void SetUniform(ShaderUniform const &uni, Array<vec2> const &v);
     89    void SetUniform(ShaderUniform const &uni, Array<vec3> const &v);
     90    void SetUniform(ShaderUniform const &uni, Array<vec4> const &v);
     91
    8792    void Bind() const;
    8893    void Unbind() const;
Note: See TracChangeset for help on using the changeset viewer.