Add OpenGLPipelineState and integrate into main.cpp
This commit is contained in:
100
engine/include/XCEngine/RHI/OpenGL/OpenGLPipelineState.h
Normal file
100
engine/include/XCEngine/RHI/OpenGL/OpenGLPipelineState.h
Normal file
@@ -0,0 +1,100 @@
|
||||
#pragma once
|
||||
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
|
||||
enum class ComparisonFunc {
|
||||
Never,
|
||||
Less,
|
||||
Equal,
|
||||
LessEqual,
|
||||
Greater,
|
||||
NotEqual,
|
||||
GreaterEqual,
|
||||
Always
|
||||
};
|
||||
|
||||
enum class BlendFactor {
|
||||
Zero,
|
||||
One,
|
||||
SrcColor,
|
||||
OneMinusSrcColor,
|
||||
DstColor,
|
||||
OneMinusDstColor,
|
||||
SrcAlpha,
|
||||
OneMinusSrcAlpha,
|
||||
DstAlpha,
|
||||
OneMinusDstAlpha,
|
||||
ConstantColor,
|
||||
OneMinusConstantColor,
|
||||
ConstantAlpha,
|
||||
OneMinusConstantAlpha
|
||||
};
|
||||
|
||||
enum class CullFace {
|
||||
Front,
|
||||
Back,
|
||||
FrontAndBack
|
||||
};
|
||||
|
||||
enum class FrontFace {
|
||||
Clockwise,
|
||||
CounterClockwise
|
||||
};
|
||||
|
||||
struct DepthStencilState {
|
||||
bool depthTestEnable = true;
|
||||
bool depthWriteEnable = true;
|
||||
ComparisonFunc depthFunc = ComparisonFunc::Less;
|
||||
};
|
||||
|
||||
struct BlendState {
|
||||
bool blendEnable = false;
|
||||
BlendFactor srcBlend = BlendFactor::SrcAlpha;
|
||||
BlendFactor dstBlend = BlendFactor::OneMinusSrcAlpha;
|
||||
BlendFactor srcBlendAlpha = BlendFactor::One;
|
||||
BlendFactor dstBlendAlpha = BlendFactor::Zero;
|
||||
};
|
||||
|
||||
struct RasterizerState {
|
||||
bool cullFaceEnable = true;
|
||||
CullFace cullFace = CullFace::Back;
|
||||
FrontFace frontFace = FrontFace::CounterClockwise;
|
||||
bool polygonModeFill = true;
|
||||
};
|
||||
|
||||
struct ViewportState {
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
float minDepth = 0.0f;
|
||||
float maxDepth = 1.0f;
|
||||
};
|
||||
|
||||
class OpenGLPipelineState {
|
||||
public:
|
||||
OpenGLPipelineState();
|
||||
~OpenGLPipelineState();
|
||||
|
||||
void SetDepthStencilState(const DepthStencilState& state);
|
||||
void SetBlendState(const BlendState& state);
|
||||
void SetRasterizerState(const RasterizerState& state);
|
||||
void SetViewport(const ViewportState& state);
|
||||
|
||||
void Apply();
|
||||
void SetClearColor(float r, float g, float b, float a);
|
||||
void Clear(unsigned int buffers);
|
||||
|
||||
private:
|
||||
DepthStencilState m_depthStencilState;
|
||||
BlendState m_blendState;
|
||||
RasterizerState m_rasterizerState;
|
||||
ViewportState m_viewportState;
|
||||
float m_clearColor[4];
|
||||
};
|
||||
|
||||
} // namespace RHI
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user