remove direct use of rtt and dirty area from the layer
This commit is contained in:
@@ -1243,12 +1243,12 @@ void CanvasModeTransform::enter(kCanvasMode prev)
|
||||
App::I->render_task([&]
|
||||
{
|
||||
m_shape[plane].update_vertices(shape3d.data(), (int)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]->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]->rtt(plane).unbindFramebuffer();
|
||||
});
|
||||
|
||||
m_commit_on_leave = true;
|
||||
@@ -1293,13 +1293,13 @@ void CanvasModeTransform::enter(kCanvasMode prev)
|
||||
|
||||
action->m_image[i] = std::make_unique<uint8_t[]>(bb_sz.x * bb_sz.y * 4);
|
||||
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->box(i);
|
||||
action->m_old_dirty[i] = layer->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->face(i) = true;
|
||||
layer->box(i) = {
|
||||
glm::min(xy(layer->box(i)), bb_min),
|
||||
glm::max(zw(layer->box(i)), bb_max),
|
||||
};
|
||||
|
||||
App::I->render_task([&]
|
||||
@@ -1311,12 +1311,12 @@ void CanvasModeTransform::enter(kCanvasMode prev)
|
||||
ShaderManager::use(kShader::Color);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, mvp);
|
||||
ShaderManager::u_vec4(kShaderUniform::Col, { 0, 0, 0, 0 });
|
||||
layer->m_rtt[i].bindFramebuffer();
|
||||
layer->rtt(i).bindFramebuffer();
|
||||
// copy framebuffer to action data
|
||||
glReadPixels(bb_min.x, bb_min.y, bb_sz.x, bb_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, action->m_image[i].get());
|
||||
for (int j = 0; j < 6; j++)
|
||||
m_shape[j].draw_fill();
|
||||
layer->m_rtt[i].unbindFramebuffer();
|
||||
layer->rtt(i).unbindFramebuffer();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1391,23 +1391,23 @@ void CanvasModeTransform::leave(kCanvasMode next)
|
||||
|
||||
action->m_image[i] = std::make_unique<uint8_t[]>(bb_sz.x * bb_sz.y * 4);
|
||||
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->box(i);
|
||||
action->m_old_dirty[i] = layer->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->face(i) = true;
|
||||
layer->box(i) = {
|
||||
glm::min(xy(layer->box(i)), bb_min),
|
||||
glm::max(zw(layer->box(i)), bb_max),
|
||||
};
|
||||
|
||||
App::I->render_task([&]
|
||||
{
|
||||
layer->m_rtt[i].bindFramebuffer();
|
||||
layer->rtt(i).bindFramebuffer();
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glViewport(0, 0, layer->m_rtt[i].getWidth(), layer->m_rtt[i].getHeight());
|
||||
glViewport(0, 0, layer->rtt(i).getWidth(), layer->rtt(i).getHeight());
|
||||
|
||||
// save fb content for history
|
||||
glReadPixels(bb_min.x, bb_min.y, bb_sz.x, bb_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, action->m_image[i].get());
|
||||
@@ -1437,7 +1437,7 @@ void CanvasModeTransform::leave(kCanvasMode next)
|
||||
m_shape[j].draw_fill();
|
||||
m_tex[j].unbind();
|
||||
}
|
||||
layer->m_rtt[i].unbindFramebuffer();
|
||||
layer->rtt(i).unbindFramebuffer();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1674,8 +1674,8 @@ void CanvasModeFloodFill::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
||||
a->m_layer_index = Canvas::I->m_current_layer_idx;
|
||||
a->m_threshold = m_tool->get_threshold();
|
||||
a->m_plane = plane;
|
||||
a->m_dirty_box = plane_data.layer->m_dirty_box;
|
||||
a->m_dirty_face = plane_data.layer->m_dirty_face;
|
||||
a->m_dirty_box = plane_data.layer->frame().m_dirty_box;
|
||||
a->m_dirty_face = plane_data.layer->frame().m_dirty_face;
|
||||
ActionManager::add(a);
|
||||
|
||||
plane_data.apply();
|
||||
|
||||
Reference in New Issue
Block a user