LCOV - code coverage report
Current view: top level - engine/render - shaderparam.cpp (source / functions) Hit Total Coverage
Test: Libprimis Test Coverage Lines: 0 129 0.0 %
Date: 2024-11-22 05:07:59 Functions: 0 21 0.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.v, sizeof(m));
      76           0 : }
      77             : 
      78           0 : void GlobalShaderParam::set(const matrix4 &m)
      79             : {
      80           0 :     std::memcpy(resolve().fval, m.a.v, 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->v);
     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->v);
     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->v);
     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.v);
     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.v);
     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 1.14