Merge pull request #1592 from bunnei/prim-restart
gl_rasterizer: Implement primitive restart.
This commit is contained in:
commit
ed95ce6bb7
5 changed files with 40 additions and 1 deletions
|
@ -570,6 +570,7 @@ void RasterizerOpenGL::DrawArrays() {
|
|||
SyncBlendState();
|
||||
SyncLogicOpState();
|
||||
SyncCullMode();
|
||||
SyncPrimitiveRestart();
|
||||
SyncDepthRange();
|
||||
SyncScissorTest();
|
||||
// Alpha Testing is synced on shaders.
|
||||
|
@ -924,6 +925,13 @@ void RasterizerOpenGL::SyncCullMode() {
|
|||
}
|
||||
}
|
||||
|
||||
void RasterizerOpenGL::SyncPrimitiveRestart() {
|
||||
const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs;
|
||||
|
||||
state.primitive_restart.enabled = regs.primitive_restart.enabled;
|
||||
state.primitive_restart.index = regs.primitive_restart.index;
|
||||
}
|
||||
|
||||
void RasterizerOpenGL::SyncDepthRange() {
|
||||
const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs;
|
||||
|
||||
|
|
|
@ -144,6 +144,9 @@ private:
|
|||
/// Syncs the cull mode to match the guest state
|
||||
void SyncCullMode();
|
||||
|
||||
/// Syncs the primitve restart to match the guest state
|
||||
void SyncPrimitiveRestart();
|
||||
|
||||
/// Syncs the depth range to match the guest state
|
||||
void SyncDepthRange();
|
||||
|
||||
|
|
|
@ -24,6 +24,9 @@ OpenGLState::OpenGLState() {
|
|||
depth.depth_range_near = 0.0f;
|
||||
depth.depth_range_far = 1.0f;
|
||||
|
||||
primitive_restart.enabled = false;
|
||||
primitive_restart.index = 0;
|
||||
|
||||
color_mask.red_enabled = GL_TRUE;
|
||||
color_mask.green_enabled = GL_TRUE;
|
||||
color_mask.blue_enabled = GL_TRUE;
|
||||
|
@ -127,6 +130,18 @@ void OpenGLState::Apply() const {
|
|||
glDepthRange(depth.depth_range_near, depth.depth_range_far);
|
||||
}
|
||||
|
||||
// Primitive restart
|
||||
if (primitive_restart.enabled != cur_state.primitive_restart.enabled) {
|
||||
if (primitive_restart.enabled) {
|
||||
glEnable(GL_PRIMITIVE_RESTART);
|
||||
} else {
|
||||
glDisable(GL_PRIMITIVE_RESTART);
|
||||
}
|
||||
}
|
||||
if (primitive_restart.index != cur_state.primitive_restart.index) {
|
||||
glPrimitiveRestartIndex(primitive_restart.index);
|
||||
}
|
||||
|
||||
// Color mask
|
||||
if (color_mask.red_enabled != cur_state.color_mask.red_enabled ||
|
||||
color_mask.green_enabled != cur_state.color_mask.green_enabled ||
|
||||
|
|
|
@ -49,6 +49,11 @@ public:
|
|||
GLfloat depth_range_far; // GL_DEPTH_RANGE
|
||||
} depth;
|
||||
|
||||
struct {
|
||||
bool enabled;
|
||||
GLuint index;
|
||||
} primitive_restart; // GL_PRIMITIVE_RESTART
|
||||
|
||||
struct {
|
||||
GLboolean red_enabled;
|
||||
GLboolean green_enabled;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue