Cleanup: Put GPU_state_init inside gpu_state.c
Also put glDisable(GL_DITHER) in it since we don't even use it (but is enabled by default). Also leave GL_MULTISAMPLE on by default since it has no impact on non-MSAA framebuffers.
This commit is contained in:
parent
18dd289e1a
commit
6ede93bab3
Notes:
blender-bot
2023-02-14 05:51:15 +01:00
Referenced by issue #77018, Blender Crash after using Box Select
|
@ -307,9 +307,6 @@ static void select_draw_scene(void *vedata)
|
|||
return;
|
||||
}
|
||||
|
||||
/* dithering and AA break color coding, so disable */
|
||||
glDisable(GL_DITHER);
|
||||
|
||||
DRW_view_set_active(stl->g_data->view_faces);
|
||||
|
||||
if (!DRW_pass_is_empty(psl->depth_only_pass)) {
|
||||
|
|
|
@ -63,11 +63,11 @@
|
|||
#include "ED_space_api.h"
|
||||
#include "ED_view3d.h"
|
||||
|
||||
#include "GPU_draw.h"
|
||||
#include "GPU_extensions.h"
|
||||
#include "GPU_framebuffer.h"
|
||||
#include "GPU_immediate.h"
|
||||
#include "GPU_matrix.h"
|
||||
#include "GPU_state.h"
|
||||
#include "GPU_uniformbuffer.h"
|
||||
#include "GPU_viewport.h"
|
||||
|
||||
|
|
|
@ -39,13 +39,6 @@ struct Main;
|
|||
|
||||
/* OpenGL drawing functions related to shading. */
|
||||
|
||||
/* Initialize
|
||||
* - sets the default Blender opengl state, if in doubt, check
|
||||
* the contents of this function
|
||||
* - this is called when starting Blender, for opengl rendering. */
|
||||
|
||||
void GPU_state_init(void);
|
||||
|
||||
/* Mipmap settings
|
||||
* - these will free textures on changes */
|
||||
|
||||
|
|
|
@ -40,6 +40,12 @@ typedef enum eGPUFilterFunction {
|
|||
GPU_LINEAR,
|
||||
} eGPUFilterFunction;
|
||||
|
||||
/* Initialize
|
||||
* - sets the default Blender opengl state, if in doubt, check
|
||||
* the contents of this function
|
||||
* - this is called when starting Blender, for opengl rendering. */
|
||||
void GPU_state_init(void);
|
||||
|
||||
void GPU_blend(bool enable);
|
||||
void GPU_blend_set_func(eGPUBlendFunction sfactor, eGPUBlendFunction dfactor);
|
||||
void GPU_blend_set_func_separate(eGPUBlendFunction src_rgb,
|
||||
|
|
|
@ -1481,66 +1481,3 @@ void GPU_free_images_old(Main *bmain)
|
|||
ima = ima->id.next;
|
||||
}
|
||||
}
|
||||
|
||||
static void gpu_disable_multisample(void)
|
||||
{
|
||||
#ifdef __linux__
|
||||
/* changing multisample from the default (enabled) causes problems on some
|
||||
* systems (NVIDIA/Linux) when the pixel format doesn't have a multisample buffer */
|
||||
bool toggle_ok = true;
|
||||
|
||||
if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_UNIX, GPU_DRIVER_ANY)) {
|
||||
int samples = 0;
|
||||
glGetIntegerv(GL_SAMPLES, &samples);
|
||||
|
||||
if (samples == 0) {
|
||||
toggle_ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (toggle_ok) {
|
||||
glDisable(GL_MULTISAMPLE);
|
||||
}
|
||||
#else
|
||||
glDisable(GL_MULTISAMPLE);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Default OpenGL State
|
||||
*
|
||||
* This is called on startup, for opengl offscreen render.
|
||||
* Generally we should always return to this state when
|
||||
* temporarily modifying the state for drawing, though that are (undocumented)
|
||||
* exceptions that we should try to get rid of. */
|
||||
|
||||
void GPU_state_init(void)
|
||||
{
|
||||
GPU_program_point_size(false);
|
||||
|
||||
glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
|
||||
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_COLOR_LOGIC_OP);
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
|
||||
glDepthRange(0.0, 1.0);
|
||||
|
||||
glFrontFace(GL_CCW);
|
||||
glCullFace(GL_BACK);
|
||||
glDisable(GL_CULL_FACE);
|
||||
|
||||
gpu_disable_multisample();
|
||||
|
||||
/* This is a bit dangerous since addons could change this. */
|
||||
glEnable(GL_PRIMITIVE_RESTART);
|
||||
glPrimitiveRestartIndex((GLuint)0xFFFFFFFF);
|
||||
|
||||
/* TODO: Should become default. But needs at least GL 4.3 */
|
||||
if (GLEW_ARB_ES3_compatibility) {
|
||||
/* Takes predecence over GL_PRIMITIVE_RESTART */
|
||||
glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -541,10 +541,6 @@ void GPU_framebuffer_bind(GPUFrameBuffer *fb)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (fb->multisample) {
|
||||
glEnable(GL_MULTISAMPLE);
|
||||
}
|
||||
|
||||
glViewport(0, 0, fb->width, fb->height);
|
||||
}
|
||||
|
||||
|
|
|
@ -370,4 +370,44 @@ void gpuPopAttr(void)
|
|||
#undef Attr
|
||||
#undef AttrStack
|
||||
|
||||
/* Default OpenGL State
|
||||
*
|
||||
* This is called on startup, for opengl offscreen render.
|
||||
* Generally we should always return to this state when
|
||||
* temporarily modifying the state for drawing, though that are (undocumented)
|
||||
* exceptions that we should try to get rid of. */
|
||||
|
||||
void GPU_state_init(void)
|
||||
{
|
||||
GPU_program_point_size(false);
|
||||
|
||||
glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_COLOR_LOGIC_OP);
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
glDisable(GL_DITHER);
|
||||
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glDepthRange(0.0, 1.0);
|
||||
|
||||
glFrontFace(GL_CCW);
|
||||
glCullFace(GL_BACK);
|
||||
glDisable(GL_CULL_FACE);
|
||||
|
||||
/* Is default but better be explicit. */
|
||||
glEnable(GL_MULTISAMPLE);
|
||||
|
||||
/* This is a bit dangerous since addons could change this. */
|
||||
glEnable(GL_PRIMITIVE_RESTART);
|
||||
glPrimitiveRestartIndex((GLuint)0xFFFFFFFF);
|
||||
|
||||
/* TODO: Should become default. But needs at least GL 4.3 */
|
||||
if (GLEW_ARB_ES3_compatibility) {
|
||||
/* Takes predecence over GL_PRIMITIVE_RESTART */
|
||||
glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
|
||||
}
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
|
@ -84,11 +84,11 @@
|
|||
#include "GPU_batch.h"
|
||||
#include "GPU_batch_presets.h"
|
||||
#include "GPU_context.h"
|
||||
#include "GPU_draw.h"
|
||||
#include "GPU_framebuffer.h"
|
||||
#include "GPU_immediate.h"
|
||||
#include "GPU_init_exit.h"
|
||||
#include "GPU_platform.h"
|
||||
#include "GPU_state.h"
|
||||
|
||||
#include "UI_resources.h"
|
||||
|
||||
|
|
Loading…
Reference in New Issue