mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-12 07:34:50 +00:00
- add vertex buffer based rendering for decals.
This commit is contained in:
parent
cf45f2d718
commit
579eff5b96
2 changed files with 23 additions and 7 deletions
|
@ -45,6 +45,7 @@
|
||||||
|
|
||||||
#include "gl/system/gl_cvars.h"
|
#include "gl/system/gl_cvars.h"
|
||||||
#include "gl/data/gl_data.h"
|
#include "gl/data/gl_data.h"
|
||||||
|
#include "gl/data/gl_vertexbuffer.h"
|
||||||
#include "gl/renderer/gl_renderer.h"
|
#include "gl/renderer/gl_renderer.h"
|
||||||
#include "gl/renderer/gl_lightdata.h"
|
#include "gl/renderer/gl_lightdata.h"
|
||||||
#include "gl/renderer/gl_renderstate.h"
|
#include "gl/renderer/gl_renderstate.h"
|
||||||
|
@ -336,13 +337,28 @@ void GLWall::DrawDecal(DBaseDecal *decal)
|
||||||
else gl_RenderState.AlphaFunc(GL_GREATER, 0.f);
|
else gl_RenderState.AlphaFunc(GL_GREATER, 0.f);
|
||||||
|
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
glBegin(GL_TRIANGLE_FAN);
|
if (!gl_usevbo)
|
||||||
for(i=0;i<4;i++)
|
|
||||||
{
|
{
|
||||||
glTexCoord2f(dv[i].u,dv[i].v);
|
glBegin(GL_TRIANGLE_FAN);
|
||||||
glVertex3f(dv[i].x,dv[i].z,dv[i].y);
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
glTexCoord2f(dv[i].u, dv[i].v);
|
||||||
|
glVertex3f(dv[i].x, dv[i].z, dv[i].y);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FFlatVertex *ptr = GLRenderer->mVBO->GetBuffer();
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
ptr->Set(dv[i].x, dv[i].z, dv[i].y, dv[i].u, dv[i].v);
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
unsigned int offset;
|
||||||
|
unsigned int count = GLRenderer->mVBO->GetCount(ptr, &offset);
|
||||||
|
glDrawArrays(GL_TRIANGLE_FAN, offset, count);
|
||||||
}
|
}
|
||||||
glEnd();
|
|
||||||
rendered_decals++;
|
rendered_decals++;
|
||||||
gl_RenderState.SetTextureMode(TM_MODULATE);
|
gl_RenderState.SetTextureMode(TM_MODULATE);
|
||||||
gl_RenderState.SetObjectColor(0xffffffff);
|
gl_RenderState.SetObjectColor(0xffffffff);
|
||||||
|
|
|
@ -153,14 +153,14 @@ void GLFlat::DrawSubsectorLights(subsector_t * sub, int pass)
|
||||||
|
|
||||||
// Render the light
|
// Render the light
|
||||||
glBegin(GL_TRIANGLE_FAN);
|
glBegin(GL_TRIANGLE_FAN);
|
||||||
for(k = 0, v = sub->firstline; k < sub->numlines; k++, v++)
|
for (k = 0, v = sub->firstline; k < sub->numlines; k++, v++)
|
||||||
{
|
{
|
||||||
vertex_t *vt = v->v1;
|
vertex_t *vt = v->v1;
|
||||||
float zc = plane.plane.ZatPoint(vt->fx, vt->fy) + dz;
|
float zc = plane.plane.ZatPoint(vt->fx, vt->fy) + dz;
|
||||||
|
|
||||||
t1.Set(vt->fx, zc, vt->fy);
|
t1.Set(vt->fx, zc, vt->fy);
|
||||||
Vector nearToVert = t1 - nearPt;
|
Vector nearToVert = t1 - nearPt;
|
||||||
glTexCoord2f( (nearToVert.Dot(right) * scale) + 0.5f, (nearToVert.Dot(up) * scale) + 0.5f);
|
glTexCoord2f((nearToVert.Dot(right) * scale) + 0.5f, (nearToVert.Dot(up) * scale) + 0.5f);
|
||||||
|
|
||||||
glVertex3f(vt->fx, zc, vt->fy);
|
glVertex3f(vt->fx, zc, vt->fy);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue