From 072024fa414f4e807ba8a35b36cfcef3a59f6555 Mon Sep 17 00:00:00 2001 From: n00b Date: Wed, 11 Dec 2024 12:53:24 -0500 Subject: [PATCH] Fixed Scaling issues when changing window size Fixed Window Scaling issue and Fixed SetSpriteVisible() --- rcbasic_runtime/main.cpp | 2 +- rcbasic_runtime/rc_gfx.h | 71 ++++++++++++++++++++++---- rcbasic_runtime/rc_spritelib.h | 2 +- rcbasic_runtime/rcbasic_runtime.depend | 16 +++--- 4 files changed, 71 insertions(+), 20 deletions(-) diff --git a/rcbasic_runtime/main.cpp b/rcbasic_runtime/main.cpp index 458a1f6..02c76e1 100755 --- a/rcbasic_runtime/main.cpp +++ b/rcbasic_runtime/main.cpp @@ -4446,7 +4446,7 @@ int main(int argc, char * argv[]) std::cin >> debug_opt; if(debug_opt.compare("a")==0) { - //rc_intern_dirChange("/home/n00b/projects/bu/rcbasic_v400A6_linux/rcbasic_v400_linux/examples/tile_demo/"); + //rc_intern_dirChange("/home/n00b/Music/rcbasic_v400_linux64/examples/tile_demo"); rc_intern_dirChange("/home/n00b/projects/rcbasic_alpha3/test_project"); rc_filename = "main.cbc"; } diff --git a/rcbasic_runtime/rc_gfx.h b/rcbasic_runtime/rc_gfx.h index 25bc264..53f1e14 100644 --- a/rcbasic_runtime/rc_gfx.h +++ b/rcbasic_runtime/rc_gfx.h @@ -511,12 +511,32 @@ void rc_setWindowSize(int w, int h) SDL_SetWindowSize(rc_window, w, h); irr::core::dimension2d win_size; - int w, h; - SDL_GetWindowSize(rc_window, &w, &h); + int win_w, win_h; + SDL_GetWindowSize(rc_window, &win_w, &win_h); win_size.Width = w; win_size.Height = h; - device->setWindowSize(win_size); + if(rc_canvas[0].texture) + VideoDriver->removeTexture(rc_canvas[0].texture); + + rc_canvas[0].texture = NULL; + + #ifdef RC_DRIVER_GLES2 + Uint32 size_n = 2; + Uint32 dim_max = (w > h ? w : h); + while(size_n < dim_max) size_n *= 2; + rc_canvas[0].texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)size_n, (irr::u32)size_n), "rt", ECF_A8R8G8B8); + #else + rc_canvas[0].texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)win_w, (irr::u32)win_h), "rt", ECF_A8R8G8B8); + #endif // RC_WEB + //std::cout << "back_buffer done" << std::endl << std::endl;*/ + + rc_canvas[0].dimension.Width = win_w; + rc_canvas[0].dimension.Height = win_h; + rc_canvas[0].viewport.position.set(0,0); + rc_canvas[0].viewport.dimension.set(win_w,win_h); + //std::cout << std::endl << "tgt start" << std::endl; + VideoDriver->setRenderTarget(rc_canvas[0].texture, true, true); rc_window_size.Width = w; rc_window_size.Height = h; @@ -714,10 +734,26 @@ bool rc_setWindowFullscreen(int flag) int w, h; - SDL_GetWindowSize(rc_window, &w, &h); + //SDL_GetWindowSize(rc_window, &w, &h); - irr::core::dimension2d win_size(w, h); - device->setWindowSize(win_size); + //irr::core::dimension2d win_size(w, h); + //device->setWindowSize(win_size); + + /* + if(rc_canvas[0].texture != NULL) + VideoDriver->removeTexture(rc_canvas[0].texture); + + rc_canvas_obj back_buffer; + #ifdef RC_DRIVER_GLES2 + Uint32 size_n = 2; + Uint32 dim_max = (w > h ? w : h); + while(size_n < dim_max) size_n *= 2; + rc_canvas[0].texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)size_n, (irr::u32)size_n), "rt", ECF_A8R8G8B8); + #else + rc_canvas[0].texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)w, (irr::u32)h), "rt", ECF_A8R8G8B8); + #endif // RC_WEB + + */ setMouseScaling(); @@ -964,6 +1000,8 @@ int rc_canvasOpen(int w, int h, int vx, int vy, int vw, int vh, int mode, int ca Uint32 size_n = 2; Uint32 dim_max = (w > h ? w : h); while(size_n < dim_max) size_n *= 2; + //w = size_n; + //h = size_n; canvas.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d(size_n,size_n), "rt", ECF_A8R8G8B8); #else canvas.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d(w,h), "rt", ECF_A8R8G8B8); @@ -3669,7 +3707,7 @@ bool rc_update() irr::video::SColor color(rc_canvas[canvas_id].color_mod); //color.set(255,255,255,255); - //std::cout << "draw canvas[" << canvas_id << "] (" << rc_canvas[canvas_id].offset.X << ", " << rc_canvas[canvas_id].offset.Y << ") (" << rc_canvas[canvas_id].viewport.dimension.Width << ", " << rc_canvas[canvas_id].dimension.Height << ")" << std::endl; + //std::cout << "draw canvas[" << canvas_id << "] (" << rc_canvas[canvas_id].offset.X << ", " << rc_canvas[canvas_id].offset.Y << ") (" << rc_canvas[canvas_id].viewport.dimension.Width << ", " << rc_canvas[canvas_id].viewport.dimension.Height << ")" << std::endl; #if defined(RC_DRIVER_GLES2) if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_3D) @@ -3722,9 +3760,22 @@ bool rc_update() //VideoDriver->draw2DImage(rc_canvas[0].texture, irr::core::vector2d(0,0)); //debug - irr::core::rect src( irr::core::vector2d(0,0), rc_canvas[0].texture->getSize() ); + //std::cout << "scale:: " << rc_window_size.Width << ", " << win_w << ", " << rc_canvas[0].texture->getSize().Width << std::endl; + //irr::core::rect src( irr::core::vector2d(0,0), rc_canvas[0].texture->getSize() ); + #ifdef RC_DRIVER_GLES2 + irr::core::rect src( irr::core::vector2d(0,0), rc_canvas[0].texture->getSize() ); irr::core::rect dest( irr::core::vector2d(0,0), irr::core::dimension2d(win_w*w_scale, win_h*h_scale) ); - irr::video::SColor color(0); + #else + irr::core::rect src( irr::core::vector2d(0,0), rc_window_size ); + irr::core::rect dest; + + if(rc_windowIsFullscreen()) + dest = irr::core::rect( irr::core::vector2d(0,0), irr::core::dimension2d(win_w, win_h) ); + else + dest = irr::core::rect( irr::core::vector2d(0,rc_canvas[0].texture->getSize().Height - rc_window_size.Height), irr::core::dimension2d(win_w, win_h) ); + #endif // RC_DRIVER_GLES2 + + //irr::video::SColor color(0); VideoDriver->draw2DImage(rc_canvas[0].texture, dest, src); //draw2DImage2(VideoDriver, rc_canvas[0].texture, src, dest, irr::core::position2d(0, 0), 0, false, color, screenSize); //irr::core::rect src( irr::core::vector2d(0, 0), rc_canvas[0].texture->getSize() ); @@ -3732,7 +3783,7 @@ bool rc_update() //draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d(0, 0), 0, true, color, screenSize); //VideoDriver->draw2DImage(rc_image[0].image, irr::core::rect(0,0,100,100), irr::core::rect(0,0,100,100)); - //VideoDriver->draw2DRectangle(irr::video::SColor(255,2555,0,0), irr::core::rect(0,0,100,100)); + //VideoDriver->draw2DRectangle(irr::video::SColor(255,255,0,0), irr::core::rect(0,0,100,100)); //end debug //device->getGUIEnvironment()->drawAll(); diff --git a/rcbasic_runtime/rc_spritelib.h b/rcbasic_runtime/rc_spritelib.h index 35825dd..c57905c 100644 --- a/rcbasic_runtime/rc_spritelib.h +++ b/rcbasic_runtime/rc_spritelib.h @@ -779,7 +779,7 @@ void rc_setSpriteVisible(int spr_id, bool flag) if(!rc_sprite[spr_id].active) return; - if(rc_sprite[spr_id].image_id) + if(rc_sprite[spr_id].image_id >= 0) rc_sprite[spr_id].visible = flag; else rc_sprite[spr_id].visible = false; diff --git a/rcbasic_runtime/rcbasic_runtime.depend b/rcbasic_runtime/rcbasic_runtime.depend index 3f268e4..9c20ab5 100755 --- a/rcbasic_runtime/rcbasic_runtime.depend +++ b/rcbasic_runtime/rcbasic_runtime.depend @@ -1,5 +1,5 @@ # depslib dependency file v1.0 -1733590876 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp +1733892371 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp "rc_os_defines.h" @@ -32,10 +32,10 @@ "rc_func130_cases.h" -1733777274 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h +1733939324 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h -1733771900 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h +1733777902 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h 1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h "rc_os_defines.h" @@ -1247,7 +1247,7 @@ 1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h -1733769905 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h +1733938538 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h "SDL.h" @@ -1271,7 +1271,7 @@ "rc_joints.h" -1733768002 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h +1733777902 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h "SDL.h" "btBulletDynamicsCommon.h" "BulletSoftBody/btSoftRigidDynamicsWorld.h" @@ -2272,7 +2272,7 @@ "rc_gfx_core.h" -1733771900 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h +1733777902 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h 1724469097 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp "irrBullet.h" @@ -2487,7 +2487,7 @@ -1733590876 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h +1733892344 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h "SDL.h" "rc_sprite2D.h" @@ -2531,7 +2531,7 @@ 1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_particles.h -1733775776 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_scene.h +1733777902 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_scene.h "rc_gfx_core.h" 1731249956 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h