LCOV - code coverage report
Current view: top level - engine/render - shaderparam.cpp (source / functions) Coverage Total Hit
Test: Libprimis Test Coverage Lines: 0.0 % 129 0
Test Date: 2025-02-18 06:21:28 Functions: 0.0 % 21 0

            Line data    Source code
       1              : // texture.cpp: texture slot management
       2              : 
       3              : #include "../libprimis-headers/cube.h"
       4              : #include "../../shared/geomexts.h"
       5              : #include "../../shared/glexts.h"
       6              : #include "../../shared/stream.h"
       7              : 
       8              : #include "imagedata.h"
       9              : #include "octarender.h"
      10              : #include "renderwindow.h"
      11              : #include "shaderparam.h"
      12              : #include "shader.h"
      13              : #include "texture.h"
      14              : 
      15              : #include "world/light.h"
      16              : #include "world/material.h"
      17              : #include "world/octaedit.h"
      18              : #include "world/octaworld.h"
      19              : #include "world/world.h"
      20              : 
      21              : #include "interface/console.h"
      22              : #include "interface/control.h"
      23              : 
      24              : //globalshaderparam
      25              : 
      26            0 : GlobalShaderParam::GlobalShaderParam(const char *name) : name(name), param(nullptr) {}
      27              : 
      28            0 : GlobalShaderParamState &GlobalShaderParam::getglobalparam(const std::string &name) const
      29              : {
      30            0 :     auto itr = globalparams.find(name);
      31            0 :     if(itr != globalparams.end())
      32              :     {
      33            0 :         return (*itr).second;
      34              :     }
      35              :     else
      36              :     {
      37            0 :         GlobalShaderParamState &param = globalparams[name];
      38            0 :         param.buf.fill(-1);
      39            0 :         param.version = -1;
      40            0 :         return param;
      41              :     }
      42              : }
      43              : 
      44            0 : GlobalShaderParamState &GlobalShaderParam::resolve()
      45              : {
      46            0 :     if(!param)
      47              :     {
      48            0 :         param = &getglobalparam(name);
      49              :     }
      50            0 :     param->changed();
      51            0 :     return *param;
      52              : }
      53              : 
      54            0 : void GlobalShaderParam::setf(float x, float y, float z, float w)
      55              : {
      56            0 :     GlobalShaderParamState &g = resolve();
      57            0 :     g.fval[0] = x;
      58            0 :     g.fval[1] = y;
      59            0 :     g.fval[2] = z;
      60            0 :     g.fval[3] = w;
      61            0 : }
      62              : 
      63            0 : void GlobalShaderParam::set(const vec &v, float w)
      64              : {
      65            0 :     setf(v.x, v.y, v.z, w);
      66            0 : }
      67              : 
      68            0 : void GlobalShaderParam::set(const vec2 &v, float z, float w)
      69              : {
      70            0 :     setf(v.x, v.y, z, w);
      71            0 : }
      72              : 
      73            0 : void GlobalShaderParam::set(const matrix3 &m)
      74              : {
      75            0 :     std::memcpy(resolve().fval, m.a.data(), sizeof(m));
      76            0 : }
      77              : 
      78            0 : void GlobalShaderParam::set(const matrix4 &m)
      79              : {
      80            0 :     std::memcpy(resolve().fval, m.a.data(), sizeof(m));
      81            0 : }
      82              : 
      83              : std::map<std::string, GlobalShaderParamState> globalparams;
      84              : 
      85              : //localshaderparam
      86              : 
      87            0 : LocalShaderParam::LocalShaderParam(const char *name) : name(name), loc(-1)
      88              : {
      89            0 : }
      90              : 
      91            0 : const LocalShaderParamState *LocalShaderParam::resolve() const
      92              : {
      93            0 :     const Shader *s = Shader::lastshader;
      94            0 :     if(!s)
      95              :     {
      96            0 :         return nullptr;
      97              :     }
      98            0 :     if(!(s->localparamremap.size() > static_cast<uint>(loc)))
      99              :     {
     100            0 :         if(loc == -1)
     101              :         {
     102            0 :             loc = getlocalparam(name);
     103              :         }
     104            0 :         if(!(s->localparamremap.size() > static_cast<uint>(loc)))
     105              :         {
     106            0 :             return nullptr;
     107              :         }
     108              :     }
     109            0 :     uchar remap = s->localparamremap[loc];
     110            0 :     return (s->localparams.size() > remap) ? &s->localparams[remap] : nullptr;
     111              : }
     112              : 
     113            0 : void LocalShaderParam::setf(float x, float y, float z, float w) const
     114              : {
     115            0 :     const ShaderParamBinding *b = resolve();
     116            0 :     if(b)
     117              :     {
     118            0 :         switch(b->format)
     119              :         {
     120            0 :             case GL_BOOL:
     121              :             case GL_FLOAT:
     122              :             {
     123            0 :                 glUniform1f(b->loc, x);
     124            0 :                 break;
     125              :             }
     126            0 :             case GL_BOOL_VEC2:
     127              :             case GL_FLOAT_VEC2:
     128              :             {
     129            0 :                 glUniform2f(b->loc, x, y);
     130            0 :                 break;
     131              :             }
     132            0 :             case GL_BOOL_VEC3:
     133              :             case GL_FLOAT_VEC3:
     134              :             {
     135            0 :                 glUniform3f(b->loc, x, y, z);
     136            0 :                 break;
     137              :             }
     138            0 :             case GL_BOOL_VEC4:
     139              :             case GL_FLOAT_VEC4:
     140              :             {
     141            0 :                 glUniform4f(b->loc, x, y, z, w);
     142            0 :                 break;
     143              :             }
     144            0 :             case GL_INT:
     145              :             {
     146            0 :                 glUniform1i(b->loc, static_cast<int>(x));
     147            0 :                 break;
     148              :             }
     149            0 :             case GL_INT_VEC2:
     150              :             {
     151            0 :                 glUniform2i(b->loc, static_cast<int>(x), static_cast<int>(y));
     152            0 :                 break;
     153              :             }
     154            0 :             case GL_INT_VEC3:
     155              :             {
     156            0 :                 glUniform3i(b->loc, static_cast<int>(x), static_cast<int>(y), static_cast<int>(z));
     157            0 :                 break;
     158              :             }
     159            0 :             case GL_INT_VEC4:
     160              :             {
     161            0 :                 glUniform4i(b->loc, static_cast<int>(x), static_cast<int>(y), static_cast<int>(z), static_cast<int>(w));
     162            0 :                 break;
     163              :             }
     164            0 :             case GL_UNSIGNED_INT:
     165              :             {
     166            0 :                 glUniform1ui(b->loc, static_cast<uint>(x));
     167            0 :                 break;
     168              :             }
     169            0 :             case GL_UNSIGNED_INT_VEC2:
     170              :             {
     171            0 :                 glUniform2ui(b->loc, static_cast<uint>(x), static_cast<uint>(y));
     172            0 :                 break;
     173              :             }
     174            0 :             case GL_UNSIGNED_INT_VEC3:
     175              :             {
     176            0 :                 glUniform3ui(b->loc, static_cast<uint>(x), static_cast<uint>(y), static_cast<uint>(z));
     177            0 :                 break;
     178              :             }
     179            0 :             case GL_UNSIGNED_INT_VEC4:
     180              :             {
     181            0 :                 glUniform4ui(b->loc, static_cast<uint>(x), static_cast<uint>(y), static_cast<uint>(z), static_cast<uint>(w));
     182            0 :                 break;
     183              :             }
     184              :         }
     185              :     }
     186            0 : }
     187              : 
     188            0 : void LocalShaderParam::set(const vec &v, float w) const
     189              : {
     190            0 :     setf(v.x, v.y, v.z, w);
     191            0 : }
     192              : 
     193            0 : void LocalShaderParam::set(const vec4<float> &v) const
     194              : {
     195            0 :     setf(v.x, v.y, v.z, v.w);
     196            0 : }
     197              : 
     198            0 : void LocalShaderParam::setv(const float *f, int n) const
     199              : {
     200            0 :     const ShaderParamBinding *b = resolve();
     201            0 :     if(b)
     202              :     {
     203            0 :         glUniform1fv(b->loc, n, f);
     204              :     }
     205            0 : }
     206              : 
     207            0 : void LocalShaderParam::setv(const vec *v, int n) const
     208              : {
     209            0 :     const ShaderParamBinding *b = resolve();
     210            0 :     if(b)
     211              :     {
     212            0 :         glUniform3fv(b->loc, n, v->data());
     213              :     }
     214            0 : }
     215              : 
     216            0 : void LocalShaderParam::setv(const vec2 *v, int n) const
     217              : {
     218            0 :     const ShaderParamBinding *b = resolve();
     219            0 :     if(b)
     220              :     {
     221            0 :         glUniform2fv(b->loc, n, v->data());
     222              :     }
     223            0 : }
     224              : 
     225            0 : void LocalShaderParam::setv(const vec4<float> *v, int n) const
     226              : {
     227            0 :     const ShaderParamBinding *b = resolve();
     228            0 :     if(b)
     229              :     {
     230            0 :         glUniform4fv(b->loc, n, v->data());
     231              :     }
     232            0 : }
     233              : 
     234            0 : void LocalShaderParam::setv(const matrix3 *m, int n) const
     235              : {
     236            0 :     const ShaderParamBinding *b = resolve();
     237            0 :     if(b)
     238              :     {
     239            0 :         glUniformMatrix3fv(b->loc, n, GL_FALSE, m->a.data());
     240              :     }
     241            0 : }
     242              : 
     243            0 : void LocalShaderParam::setv(const matrix4 *m, int n) const
     244              : {
     245            0 :     const ShaderParamBinding *b = resolve();
     246            0 :     if(b)
     247              :     {
     248            0 :         glUniformMatrix4fv(b->loc, n, GL_FALSE, m->a.data());
     249              :     }
     250            0 : }
     251              : 
     252            0 : void LocalShaderParam::set(const matrix3 &m) const
     253              : {
     254            0 :     setv(&m);
     255            0 : }
     256              : 
     257            0 : void LocalShaderParam::set(const matrix4 &m) const
     258              : {
     259            0 :     setv(&m);
     260            0 : }
        

Generated by: LCOV version 2.0-1