38 while (deleted_lights)
41 deleted_lights = deleted_lights->
getNext();
56 const char* FramebufVertexShader =
57 "in vec2 oc_Position;\n"
58 "in vec2 oc_TexCoord;\n"
59 "out vec2 texcoord;\n"
60 "uniform mat4 projectionMatrix;\n"
64 " gl_Position = projectionMatrix * vec4(oc_Position, 0.0, 1.0);\n"
69 " texcoord = oc_TexCoord;\n"
72 const char* FramebufFragmentShader =
74 "uniform sampler2D tex;\n"
75 "out vec4 fragColor;\n"
79 " fragColor = texture(tex, texcoord);\n"
82 FramebufShader.
AddVertexSlices(
"built-in FoW framebuf shader", FramebufVertexShader);
83 FramebufShader.
AddFragmentSlices(
"built-in FoW framebuf shader", FramebufFragmentShader);
95 if (!FramebufShader.
Init(
"framebuf", szUniforms, szAttributes)) {
100 return &FramebufShader;
113 const char* RenderVertexShader =
114 "in vec2 oc_Position;\n"
115 "in vec4 oc_Color;\n"
116 "out vec4 vtxColor;\n"
117 "uniform mat4 projectionMatrix;\n"
118 "uniform vec2 vertexOffset;\n"
122 " gl_Position = projectionMatrix * vec4(oc_Position + vertexOffset, 0.0, 1.0);\n"
127 " vtxColor = oc_Color;\n"
130 const char* RenderFragmentShader =
131 "in vec4 vtxColor;\n"
132 "out vec4 fragColor;\n"
136 " fragColor = vtxColor;\n"
139 RenderShader.
AddVertexSlices(
"built-in FoW render shader", RenderVertexShader);
140 RenderShader.
AddFragmentSlices(
"built-in FoW render shader", RenderFragmentShader);
152 if (!RenderShader.
Init(
"fowRender", szUniforms, szAttributes)) {
158 return &RenderShader;
176 if (!pObj->
Status)
return;
180 for (pLight = pLights; pLight; pLight = pLight->
getNext())
181 if (pLight->
getObj() == pObj)
195 pLight->pNext = pLights;
206 for (pLight = pLights; pLight; pPrev = pLight, pLight = pLight->
getNext())
207 if (pLight->getObj() == pObj)
213 (pPrev ? pPrev->pNext : pLights) = pLight->
getNext();
216 pLight->pNext = deleted_lights;
217 deleted_lights = pLight;
225 pLight->Invalidate(r);
233 if (pLight->IsVisibleForPlayer(pPlr))
246 if (!pShader)
return;
253 if (pLight->IsVisibleForPlayer(pPlr))
254 pLight->Render(pRegion, pOnScreen,
Call);
@ C4FoWRSU_ProjectionMatrix
@ C4FoWFSU_ProjectionMatrix
void Remove(C4Object *pObj)
C4Shader * GetFramebufShader()
void ClearDeletedLights()
C4Shader * GetRenderShader()
void Render(class C4FoWRegion *pRegion, const C4TargetFacet *pOnScreen, C4Player *pPlr, const StdProjectionMatrix &projectionMatrix)
void Invalidate(C4Rect r)
void Update(C4Rect r, C4Player *player)
void SetReach(int32_t iReach, int32_t iFadeout)
C4Object * getObj() const
void SetColor(uint32_t iValue)
C4FoWLight * getNext() const
int32_t lightFadeoutRange
void AddVertexSlices(const char *szWhat, const char *szText, const char *szSource="", int iFileTime=0)
bool Init(const char *szWhat, const char **szUniforms, const char **szAttributes)
void AddFragmentSlices(const char *szWhat, const char *szText, const char *szSource="", int iFileTime=0)