nv2a: Check supported line width

* Added logic to check for the supported line width range before setting the line width to avoid errors.

I also moved the glLineWidth call so that it could be after the call to get the supported line width range for the desired line type.

* Moved the glLineWidth call outside the if/else

* Moved the code to query line GL_SMOOTH_LINE_WIDTH_RANGE and GL_ALIASED_LINE_WIDTH_RANGE to nv2a_gl_context_init(void) so that it's just called while OpenGL is being initialized.

* Removed the lineWidth local variable. It's simpler to just call glLineWidth in the if and else blocks
This commit is contained in:
Fred Hallock 2024-11-22 17:49:01 -05:00 committed by GitHub
parent 7f5176bc5f
commit 79441500fe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 7 additions and 1 deletions

View File

@ -381,6 +381,8 @@ static const SurfaceFormatInfo kelvin_surface_zeta_fixed_format_map[] = {
{4, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH_STENCIL_ATTACHMENT},
};
static GLfloat supportedAliasedLineWidthRange[2] = { 0.0f, 0.0f };
static GLfloat supportedSmoothLineWidthRange[2] = { 0.0f, 0.0f };
// static void pgraph_set_context_user(NV2AState *d, uint32_t val);
static void pgraph_gl_fence(void);
@ -3053,7 +3055,6 @@ DEF_METHOD(NV097, SET_BEGIN_END)
glDisable(GL_DITHER);
}
glLineWidth(pg->surface_scale_factor);
glEnable(GL_PROGRAM_POINT_SIZE);
bool anti_aliasing = GET_MASK(pg->regs[NV_PGRAPH_ANTIALIASING], NV_PGRAPH_ANTIALIASING_ENABLE);
@ -3062,8 +3063,10 @@ DEF_METHOD(NV097, SET_BEGIN_END)
if (!anti_aliasing && pg->regs[NV_PGRAPH_SETUPRASTER] &
NV_PGRAPH_SETUPRASTER_LINESMOOTHENABLE) {
glEnable(GL_LINE_SMOOTH);
glLineWidth(MIN(supportedSmoothLineWidthRange[1], pg->surface_scale_factor));
} else {
glDisable(GL_LINE_SMOOTH);
glLineWidth(MIN(supportedAliasedLineWidthRange[1], pg->surface_scale_factor));
}
if (!anti_aliasing && pg->regs[NV_PGRAPH_SETUPRASTER] &
NV_PGRAPH_SETUPRASTER_POLYSMOOTHENABLE) {
@ -3910,6 +3913,9 @@ void nv2a_gl_context_init(void)
{
g_nv2a_context_render = glo_context_create();
g_nv2a_context_display = glo_context_create();
glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, supportedSmoothLineWidthRange);
glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, supportedAliasedLineWidthRange);
}
void nv2a_set_surface_scale_factor(unsigned int scale)