raze-gles/source/glbackend/glbackend.h

129 lines
2.3 KiB
C
Raw Normal View History

#pragma once
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <map>
2019-09-16 21:28:26 +00:00
#include "gl_samplers.h"
#include "gl_hwtexture.h"
#include "matrix.h"
class FSamplerManager;
struct BaseVertex
{
float x, y, z;
float u, v;
void SetVertex(float _x, float _y, float _z = 0)
{
x = _x;
y = _y;
z = _z;
}
void SetTexCoord(float _u = 0, float _v = 0)
{
u = _u;
v = _v;
}
void Set(float _x, float _y, float _z = 0, float _u = 0, float _v = 0)
{
x = _x;
y = _y;
z = _z;
u = _u;
v = _v;
}
};
enum EDrawType
{
DT_TRIANGLES,
DT_TRIANGLE_STRIP,
DT_TRIANGLE_FAN,
DT_QUADS,
DT_LINES
};
enum EMatrixType
{
Matrix_Projection,
Matrix_ModelView,
Matrix_Texture0,
Matrix_Texture1,
Matrix_Texture2,
Matrix_Texture3,
Matrix_Texture4,
Matrix_Texture5,
Matrix_Texture6,
Matrix_Texture7,
NUMMATRICES
};
enum ECull
{
Cull_None,
Cull_Front,
Cull_Back
};
class GLInstance
{
enum
{
MAX_TEXTURES = 15, // slot 15 is used internally and not available.
THCACHESIZE = 200,
};
std::vector<BaseVertex> Buffer; // cheap-ass implementation. The primary purpose is to get the GL accesses out of polymost.cpp, not writing something performant right away.
unsigned int LastBoundTextures[MAX_TEXTURES];
unsigned TextureHandleCache[THCACHESIZE];
int currentindex = THCACHESIZE;
int maxTextureSize;
VSMatrix matrices[NUMMATRICES];
public:
FSamplerManager *mSamplers;
void Init();
void InitGLState(int fogmode, int multisample);
void Deinit();
static int GetTexDimension(int value)
{
//if (value > gl.max_texturesize) return gl.max_texturesize;
return value;
}
std::pair<size_t, BaseVertex *> AllocVertices(size_t num);
void Draw(EDrawType type, size_t start, size_t count);
int GetTextureID();
FHardwareTexture* NewTexture();
void BindTexture(int texunit, FHardwareTexture *texid, int sampler = NoSampler);
void UnbindTexture(int texunit);
void UnbindAllTextures();
void EnableBlend(bool on);
void EnableAlphaTest(bool on);
void EnableDepthTest(bool on);
const VSMatrix &GetMatrix(int num)
{
return matrices[num];
}
void SetMatrix(int num, const VSMatrix *mat );
void SetMatrix(int num, const float *mat)
{
SetMatrix(num, reinterpret_cast<const VSMatrix*>(mat));
}
void SetCull(int type);
void EnableStencilWrite(int value);
void EnableStencilTest(int value);
void DisableStencil();
};
extern GLInstance GLInterface;