mirror of
https://github.com/Relintai/sfw.git
synced 2025-04-07 17:01:48 +02:00
Simplifications and a small rework to the immediate renderer's 2d camera api.
- Now camera_2d_projection_set_to_* helper methods won't mess with the model view matrices. - Added camera_2d_reset(). - Added helper methods to clear each matrix separately. - This also fixes a bug where the internal matrices were kept after a reset.
This commit is contained in:
parent
6bb0a96196
commit
a7a73b1081
@ -369,10 +369,21 @@ void Renderer::draw_mesh_3d_textured(const Ref<Mesh> &p_mesh, const Ref<Texture>
|
||||
camera_3d_pop_model_view_matrix();
|
||||
}
|
||||
|
||||
|
||||
void Renderer::camera_2d_bind() {
|
||||
RenderState::model_view_matrix_2d = _camera_2d_model_view_matrix;
|
||||
RenderState::projection_matrix_2d = _camera_2d_projection_matrix;
|
||||
}
|
||||
void Renderer::camera_2d_reset() {
|
||||
RenderState::model_view_matrix_2d = Transform2D();
|
||||
RenderState::projection_matrix_2d = Transform();
|
||||
|
||||
_camera_2d_model_view_matrix_stack.clear();
|
||||
_camera_2d_projection_matrix_stack.clear();
|
||||
|
||||
_camera_2d_projection_matrix = RenderState::projection_matrix_2d;
|
||||
_camera_2d_model_view_matrix = RenderState::model_view_matrix_2d;
|
||||
}
|
||||
|
||||
Transform Renderer::camera_2d_get_current_projection_matrix() const {
|
||||
return _camera_2d_projection_matrix;
|
||||
@ -398,6 +409,12 @@ void Renderer::camera_2d_pop_projection_matrix() {
|
||||
int Renderer::get_camera_2d_projection_matrix_stack_size() const {
|
||||
return _camera_2d_projection_matrix_stack.size();
|
||||
}
|
||||
void Renderer::camera_2d_projection_matrix_stack_clear() {
|
||||
_camera_2d_projection_matrix_stack.clear();
|
||||
|
||||
_camera_2d_projection_matrix = Transform();
|
||||
RenderState::projection_matrix_2d = _camera_2d_projection_matrix;
|
||||
}
|
||||
|
||||
Transform2D Renderer::camera_2d_get_current_model_view_matrix() const {
|
||||
return _camera_2d_model_view_matrix;
|
||||
@ -425,6 +442,12 @@ void Renderer::camera_2d_pop_model_view_matrix() {
|
||||
int Renderer::get_camera_2d_model_view_matrix_stack_size() const {
|
||||
return _camera_2d_model_view_matrix_stack.size();
|
||||
}
|
||||
void Renderer::camera_2d_model_view_matrix_stack_clear() {
|
||||
_camera_2d_model_view_matrix_stack.clear();
|
||||
|
||||
_camera_2d_model_view_matrix = Transform2D();
|
||||
RenderState::model_view_matrix_2d = _camera_2d_model_view_matrix;
|
||||
}
|
||||
|
||||
void Renderer::camera_2d_projection_set_to_window() {
|
||||
Vector2 size = get_window_size();
|
||||
@ -434,10 +457,9 @@ void Renderer::camera_2d_projection_set_to_window() {
|
||||
//canvas_transform.scale(Vector3(2.0f / size.x, 2.0f / size.y, 1.0f));
|
||||
canvas_transform.scale(Vector3(2.0f / size.x, -2.0f / size.y, 1.0f));
|
||||
|
||||
RenderState::model_view_matrix_2d = Transform2D();
|
||||
RenderState::projection_matrix_2d = canvas_transform;
|
||||
|
||||
_camera_2d_model_view_matrix_stack.clear();
|
||||
_camera_2d_projection_matrix_stack.clear();
|
||||
_camera_2d_projection_matrix = canvas_transform;
|
||||
}
|
||||
|
||||
void Renderer::camera_2d_projection_set_to_size(const Size2i &p_size) {
|
||||
@ -446,10 +468,9 @@ void Renderer::camera_2d_projection_set_to_size(const Size2i &p_size) {
|
||||
//canvas_transform.scale(Vector3(2.0f / size.x, 2.0f / size.y, 1.0f));
|
||||
canvas_transform.scale(Vector3(2.0f / p_size.x, -2.0f / p_size.y, 1.0f));
|
||||
|
||||
RenderState::model_view_matrix_2d = Transform2D();
|
||||
RenderState::projection_matrix_2d = canvas_transform;
|
||||
|
||||
_camera_2d_model_view_matrix_stack.clear();
|
||||
_camera_2d_projection_matrix_stack.clear();
|
||||
_camera_2d_projection_matrix = canvas_transform;
|
||||
}
|
||||
|
||||
void Renderer::camera_2d_projection_set_to_render_target() {
|
||||
@ -460,10 +481,15 @@ void Renderer::camera_2d_projection_set_to_render_target() {
|
||||
//canvas_transform.scale(Vector3(2.0f / size.x, 2.0f / size.y, 1.0f));
|
||||
canvas_transform.scale(Vector3(2.0f / size.x, -2.0f / size.y, 1.0f));
|
||||
|
||||
RenderState::model_view_matrix_2d = Transform2D();
|
||||
RenderState::projection_matrix_2d = canvas_transform;
|
||||
_camera_2d_projection_matrix_stack.clear();
|
||||
_camera_2d_projection_matrix = canvas_transform;
|
||||
}
|
||||
|
||||
_camera_2d_model_view_matrix_stack.clear();
|
||||
void Renderer::camera_2d_projection_set_to_transform(const Transform &p_transform) {
|
||||
RenderState::projection_matrix_2d = p_transform;
|
||||
_camera_2d_projection_matrix_stack.clear();
|
||||
_camera_2d_projection_matrix = p_transform;
|
||||
}
|
||||
|
||||
void Renderer::camera_3d_bind() {
|
||||
|
@ -70,20 +70,24 @@ public:
|
||||
//2D Camera API
|
||||
|
||||
void camera_2d_bind();
|
||||
void camera_2d_reset();
|
||||
|
||||
Transform camera_2d_get_current_projection_matrix() const;
|
||||
void camera_2d_push_projection_matrix(const Transform &p_transform);
|
||||
void camera_2d_pop_projection_matrix();
|
||||
int get_camera_2d_projection_matrix_stack_size() const;
|
||||
void camera_2d_projection_matrix_stack_clear();
|
||||
|
||||
Transform2D camera_2d_get_current_model_view_matrix() const;
|
||||
void camera_2d_push_model_view_matrix(const Transform2D &p_transform_2d);
|
||||
void camera_2d_pop_model_view_matrix();
|
||||
int get_camera_2d_model_view_matrix_stack_size() const;
|
||||
void camera_2d_model_view_matrix_stack_clear();
|
||||
|
||||
void camera_2d_projection_set_to_window();
|
||||
void camera_2d_projection_set_to_size(const Size2i &p_size);
|
||||
void camera_2d_projection_set_to_render_target();
|
||||
void camera_2d_projection_set_to_transform(const Transform &p_transform);
|
||||
|
||||
//3D Camera API
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user