use unique_ptr to hold the Layers vector
This commit is contained in:
@@ -1034,12 +1034,12 @@ void CanvasModeTransform::enter(kCanvasMode prev)
|
||||
auto shape3d = triangulate(m_points_face[plane]);
|
||||
m_shape[plane].update_vertices(shape3d.data(), shape3d.size());
|
||||
|
||||
Canvas::I->m_layers[Canvas::I->m_current_layer_idx].m_rtt[plane].bindFramebuffer();
|
||||
Canvas::I->m_layers[Canvas::I->m_current_layer_idx]->m_rtt[plane].bindFramebuffer();
|
||||
m_tex[plane].create(bb_sz.x, bb_sz.y);
|
||||
m_tex[plane].bind();
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, bb_min.x, bb_min.y, bb_sz.x, bb_sz.y);
|
||||
m_tex[plane].unbind();
|
||||
Canvas::I->m_layers[Canvas::I->m_current_layer_idx].m_rtt[plane].unbindFramebuffer();
|
||||
Canvas::I->m_layers[Canvas::I->m_current_layer_idx]->m_rtt[plane].unbindFramebuffer();
|
||||
|
||||
m_commit_on_leave = true;
|
||||
}
|
||||
@@ -1050,7 +1050,7 @@ void CanvasModeTransform::enter(kCanvasMode prev)
|
||||
|
||||
GLint vp[4];
|
||||
glGetIntegerv(GL_VIEWPORT, vp);
|
||||
glViewport(0, 0, layer.w, layer.h);
|
||||
glViewport(0, 0, layer->w, layer->h);
|
||||
|
||||
bool depth = glIsEnabled(GL_DEPTH_TEST);
|
||||
bool blend = glIsEnabled(GL_BLEND);
|
||||
@@ -1072,7 +1072,7 @@ void CanvasModeTransform::enter(kCanvasMode prev)
|
||||
auto mvp = proj * plane_camera * m_xform * m_xform_local;
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, mvp);
|
||||
|
||||
layer.m_rtt[i].bindFramebuffer();
|
||||
layer->m_rtt[i].bindFramebuffer();
|
||||
|
||||
glm::vec2 bb_min(Canvas::I->m_size);
|
||||
glm::vec2 bb_max(0, 0);
|
||||
@@ -1096,26 +1096,26 @@ void CanvasModeTransform::enter(kCanvasMode prev)
|
||||
|
||||
if (bb_sz.x <= 0.f || bb_sz.y <= 0.f)
|
||||
{
|
||||
layer.m_rtt[i].unbindFramebuffer();
|
||||
layer->m_rtt[i].unbindFramebuffer();
|
||||
continue;
|
||||
}
|
||||
|
||||
action->m_image[i] = std::make_unique<uint8_t[]>(bb_sz.x * bb_sz.y * 4);
|
||||
glReadPixels(bb_min.x, bb_min.y, bb_sz.x, bb_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, action->m_image[i].get());
|
||||
action->m_box[i] = { bb_min, bb_max };
|
||||
action->m_old_box[i] = layer.m_dirty_box[i];
|
||||
action->m_old_dirty[i] = layer.m_dirty_face[i];
|
||||
action->m_old_box[i] = layer->m_dirty_box[i];
|
||||
action->m_old_dirty[i] = layer->m_dirty_face[i];
|
||||
|
||||
layer.m_dirty_face[i] = true;
|
||||
layer.m_dirty_box[i] = {
|
||||
glm::min(xy(layer.m_dirty_box[i]), bb_min),
|
||||
glm::max(zw(layer.m_dirty_box[i]), bb_max),
|
||||
layer->m_dirty_face[i] = true;
|
||||
layer->m_dirty_box[i] = {
|
||||
glm::min(xy(layer->m_dirty_box[i]), bb_min),
|
||||
glm::max(zw(layer->m_dirty_box[i]), bb_max),
|
||||
};
|
||||
|
||||
for (int j = 0; j < 6; j++)
|
||||
m_shape[j].draw_fill();
|
||||
|
||||
layer.m_rtt[i].unbindFramebuffer();
|
||||
layer->m_rtt[i].unbindFramebuffer();
|
||||
}
|
||||
|
||||
depth ? glEnable(GL_DEPTH_TEST) : glDisable(GL_DEPTH_TEST);
|
||||
@@ -1142,7 +1142,7 @@ void CanvasModeTransform::leave()
|
||||
|
||||
GLint vp[4];
|
||||
glGetIntegerv(GL_VIEWPORT, vp);
|
||||
glViewport(0, 0, layer.w, layer.h);
|
||||
glViewport(0, 0, layer->w, layer->h);
|
||||
|
||||
bool depth = glIsEnabled(GL_DEPTH_TEST);
|
||||
bool blend = glIsEnabled(GL_BLEND);
|
||||
@@ -1179,7 +1179,7 @@ void CanvasModeTransform::leave()
|
||||
auto mvp = proj * mv;
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, mvp);
|
||||
|
||||
layer.m_rtt[i].bindFramebuffer();
|
||||
layer->m_rtt[i].bindFramebuffer();
|
||||
|
||||
std::vector<glm::vec2> poly2d;
|
||||
static std::vector<glm::vec2> face_corners{ {1,1}, {-1,1}, {-1,-1}, {1,-1} };
|
||||
@@ -1219,20 +1219,20 @@ void CanvasModeTransform::leave()
|
||||
|
||||
if (clipped.empty() || bb_sz.x <= 0.f || bb_sz.y <= 0.f)
|
||||
{
|
||||
layer.m_rtt[i].unbindFramebuffer();
|
||||
layer->m_rtt[i].unbindFramebuffer();
|
||||
continue;
|
||||
}
|
||||
|
||||
action->m_image[i] = std::make_unique<uint8_t[]>(bb_sz.x * bb_sz.y * 4);
|
||||
glReadPixels(bb_min.x, bb_min.y, bb_sz.x, bb_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, action->m_image[i].get());
|
||||
action->m_box[i] = { bb_min, bb_max };
|
||||
action->m_old_box[i] = layer.m_dirty_box[i];
|
||||
action->m_old_dirty[i] = layer.m_dirty_face[i];
|
||||
action->m_old_box[i] = layer->m_dirty_box[i];
|
||||
action->m_old_dirty[i] = layer->m_dirty_face[i];
|
||||
|
||||
layer.m_dirty_face[i] = true;
|
||||
layer.m_dirty_box[i] = {
|
||||
glm::min(xy(layer.m_dirty_box[i]), bb_min),
|
||||
glm::max(zw(layer.m_dirty_box[i]), bb_max),
|
||||
layer->m_dirty_face[i] = true;
|
||||
layer->m_dirty_box[i] = {
|
||||
glm::min(xy(layer->m_dirty_box[i]), bb_min),
|
||||
glm::max(zw(layer->m_dirty_box[i]), bb_max),
|
||||
};
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
@@ -1247,7 +1247,7 @@ void CanvasModeTransform::leave()
|
||||
m_tex[j].unbind();
|
||||
}
|
||||
|
||||
layer.m_rtt[i].unbindFramebuffer();
|
||||
layer->m_rtt[i].unbindFramebuffer();
|
||||
}
|
||||
depth ? glEnable(GL_DEPTH_TEST) : glDisable(GL_DEPTH_TEST);
|
||||
blend ? glEnable(GL_BLEND) : glDisable(GL_BLEND);
|
||||
@@ -1257,7 +1257,7 @@ void CanvasModeTransform::leave()
|
||||
action->m_canvas = Canvas::I;
|
||||
//action->m_stroke = std::move(m_current_stroke);
|
||||
ActionManager::add(action);
|
||||
layer.optimize();
|
||||
layer->optimize();
|
||||
//auto m = static_cast<CanvasModeMaskFree*>(Canvas::I->modes[(int)kCanvasMode::MaskFree][0]);
|
||||
//m->clear();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user