Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/blender/blender_gpu_display.cpp
| Show First 20 Lines • Show All 264 Lines • ▼ Show 20 Lines | uint BlenderDisplaySpaceShader::get_shader_program() | ||||
| return shader_program_; | return shader_program_; | ||||
| } | } | ||||
| /* -------------------------------------------------------------------- | /* -------------------------------------------------------------------- | ||||
| * BlenderGPUDisplay. | * BlenderGPUDisplay. | ||||
| */ | */ | ||||
| BlenderGPUDisplay::BlenderGPUDisplay(BL::RenderEngine &b_engine, BL::Scene &b_scene) | BlenderGPUDisplay::BlenderGPUDisplay(BL::RenderEngine &b_engine, | ||||
| : display_shader_(BlenderDisplayShader::create(b_engine, b_scene)) | BL::Scene &b_scene, | ||||
| bool background) | |||||
| : background_(background), display_shader_(BlenderDisplayShader::create(b_engine, b_scene)) | |||||
| { | { | ||||
| /* Create context while on the main thread. */ | /* Create context while on the main thread. */ | ||||
| gl_context_create(); | gl_context_create(); | ||||
| } | } | ||||
| BlenderGPUDisplay::~BlenderGPUDisplay() | BlenderGPUDisplay::~BlenderGPUDisplay() | ||||
| { | { | ||||
| gl_resources_destroy(); | gl_resources_destroy(); | ||||
| ▲ Show 20 Lines • Show All 210 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| const bool drw_state = DRW_opengl_context_release(); | const bool drw_state = DRW_opengl_context_release(); | ||||
| gl_context_ = WM_opengl_context_create(); | gl_context_ = WM_opengl_context_create(); | ||||
| if (!gl_context_) { | if (!gl_context_) { | ||||
| LOG(ERROR) << "Error creating OpenGL context."; | LOG(ERROR) << "Error creating OpenGL context."; | ||||
| } | } | ||||
| WM_opengl_context_release(gl_context_); | |||||
| DRW_opengl_context_activate(drw_state); | DRW_opengl_context_activate(drw_state); | ||||
| } | } | ||||
| bool BlenderGPUDisplay::gl_draw_resources_ensure() | bool BlenderGPUDisplay::gl_draw_resources_ensure() | ||||
| { | { | ||||
| if (!texture_.gl_id_) { | if (!texture_.gl_id_) { | ||||
| /* If there is no texture allocated, there is nothing to draw. Inform the draw call that it can | /* If there is no texture allocated, there is nothing to draw. Inform the draw call that it can | ||||
| * can not continue. Note that this is not an unrecoverable error, so once the texture is known | * can not continue. Note that this is not an unrecoverable error, so once the texture is known | ||||
| ▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | void BlenderGPUDisplay::vertex_buffer_update() | ||||
| * rendered. */ | * rendered. */ | ||||
| glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), NULL, GL_STREAM_DRAW); | glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), NULL, GL_STREAM_DRAW); | ||||
| float *vpointer = reinterpret_cast<float *>(glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY)); | float *vpointer = reinterpret_cast<float *>(glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY)); | ||||
| if (!vpointer) { | if (!vpointer) { | ||||
| return; | return; | ||||
| } | } | ||||
| if (!background_) { | |||||
| vpointer[0] = 0.0f; | vpointer[0] = 0.0f; | ||||
| vpointer[1] = 0.0f; | vpointer[1] = 0.0f; | ||||
| vpointer[2] = params_.offset.x; | vpointer[2] = params_.offset.x; | ||||
| vpointer[3] = params_.offset.y; | vpointer[3] = params_.offset.y; | ||||
| vpointer[4] = 1.0f; | vpointer[4] = 1.0f; | ||||
| vpointer[5] = 0.0f; | vpointer[5] = 0.0f; | ||||
| vpointer[6] = (float)params_.size.x + params_.offset.x; | vpointer[6] = (float)params_.size.x + params_.offset.x; | ||||
| vpointer[7] = params_.offset.y; | vpointer[7] = params_.offset.y; | ||||
| vpointer[8] = 1.0f; | vpointer[8] = 1.0f; | ||||
| vpointer[9] = 1.0f; | vpointer[9] = 1.0f; | ||||
| vpointer[10] = (float)params_.size.x + params_.offset.x; | vpointer[10] = (float)params_.size.x + params_.offset.x; | ||||
| vpointer[11] = (float)params_.size.y + params_.offset.y; | vpointer[11] = (float)params_.size.y + params_.offset.y; | ||||
| vpointer[12] = 0.0f; | vpointer[12] = 0.0f; | ||||
| vpointer[13] = 1.0f; | vpointer[13] = 1.0f; | ||||
| vpointer[14] = params_.offset.x; | vpointer[14] = params_.offset.x; | ||||
| vpointer[15] = (float)params_.size.y + params_.offset.y; | vpointer[15] = (float)params_.size.y + params_.offset.y; | ||||
| } | |||||
| else { | |||||
| vpointer[0] = 0.0f; | |||||
| vpointer[1] = 0.0f; | |||||
| vpointer[2] = 0; | |||||
| vpointer[3] = 0; | |||||
| vpointer[4] = 1.0f; | |||||
| vpointer[5] = 0.0f; | |||||
| vpointer[6] = 1; | |||||
| vpointer[7] = 0; | |||||
| vpointer[8] = 1.0f; | |||||
| vpointer[9] = 1.0f; | |||||
| vpointer[10] = 1; | |||||
| vpointer[11] = 1; | |||||
| vpointer[12] = 0.0f; | |||||
| vpointer[13] = 1.0f; | |||||
| vpointer[14] = 0; | |||||
| vpointer[15] = 1; | |||||
| } | |||||
| glUnmapBuffer(GL_ARRAY_BUFFER); | glUnmapBuffer(GL_ARRAY_BUFFER); | ||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||