Fixed Scaling issues when changing window size

Fixed Window Scaling issue and Fixed SetSpriteVisible()
This commit is contained in:
n00b
2024-12-11 12:53:24 -05:00
parent bb03c0f9a3
commit 072024fa41
4 changed files with 71 additions and 20 deletions

View File

@@ -4446,7 +4446,7 @@ int main(int argc, char * argv[])
std::cin >> debug_opt; std::cin >> debug_opt;
if(debug_opt.compare("a")==0) 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_intern_dirChange("/home/n00b/projects/rcbasic_alpha3/test_project");
rc_filename = "main.cbc"; rc_filename = "main.cbc";
} }

View File

@@ -511,12 +511,32 @@ void rc_setWindowSize(int w, int h)
SDL_SetWindowSize(rc_window, w, h); SDL_SetWindowSize(rc_window, w, h);
irr::core::dimension2d<u32> win_size; irr::core::dimension2d<u32> win_size;
int w, h; int win_w, win_h;
SDL_GetWindowSize(rc_window, &w, &h); SDL_GetWindowSize(rc_window, &win_w, &win_h);
win_size.Width = w; win_size.Width = w;
win_size.Height = h; 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>((irr::u32)size_n, (irr::u32)size_n), "rt", ECF_A8R8G8B8);
#else
rc_canvas[0].texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d<irr::u32>((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.Width = w;
rc_window_size.Height = h; rc_window_size.Height = h;
@@ -714,10 +734,26 @@ bool rc_setWindowFullscreen(int flag)
int w, h; int w, h;
SDL_GetWindowSize(rc_window, &w, &h); //SDL_GetWindowSize(rc_window, &w, &h);
irr::core::dimension2d<u32> win_size(w, h); //irr::core::dimension2d<u32> win_size(w, h);
device->setWindowSize(win_size); //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>((irr::u32)size_n, (irr::u32)size_n), "rt", ECF_A8R8G8B8);
#else
rc_canvas[0].texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d<irr::u32>((irr::u32)w, (irr::u32)h), "rt", ECF_A8R8G8B8);
#endif // RC_WEB
*/
setMouseScaling(); 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 size_n = 2;
Uint32 dim_max = (w > h ? w : h); Uint32 dim_max = (w > h ? w : h);
while(size_n < dim_max) size_n *= 2; while(size_n < dim_max) size_n *= 2;
//w = size_n;
//h = size_n;
canvas.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d<u32>(size_n,size_n), "rt", ECF_A8R8G8B8); canvas.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d<u32>(size_n,size_n), "rt", ECF_A8R8G8B8);
#else #else
canvas.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d<u32>(w,h), "rt", ECF_A8R8G8B8); canvas.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d<u32>(w,h), "rt", ECF_A8R8G8B8);
@@ -3669,7 +3707,7 @@ bool rc_update()
irr::video::SColor color(rc_canvas[canvas_id].color_mod); irr::video::SColor color(rc_canvas[canvas_id].color_mod);
//color.set(255,255,255,255); //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 defined(RC_DRIVER_GLES2)
if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_3D) 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<irr::s32>(0,0)); //VideoDriver->draw2DImage(rc_canvas[0].texture, irr::core::vector2d<irr::s32>(0,0));
//debug //debug
irr::core::rect<s32> src( irr::core::vector2d<s32>(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<s32> src( irr::core::vector2d<s32>(0,0), rc_canvas[0].texture->getSize() );
#ifdef RC_DRIVER_GLES2
irr::core::rect<s32> src( irr::core::vector2d<s32>(0,0), rc_canvas[0].texture->getSize() );
irr::core::rect<s32> dest( irr::core::vector2d<s32>(0,0), irr::core::dimension2d<s32>(win_w*w_scale, win_h*h_scale) ); irr::core::rect<s32> dest( irr::core::vector2d<s32>(0,0), irr::core::dimension2d<s32>(win_w*w_scale, win_h*h_scale) );
irr::video::SColor color(0); #else
irr::core::rect<s32> src( irr::core::vector2d<s32>(0,0), rc_window_size );
irr::core::rect<s32> dest;
if(rc_windowIsFullscreen())
dest = irr::core::rect<s32>( irr::core::vector2d<s32>(0,0), irr::core::dimension2d<s32>(win_w, win_h) );
else
dest = irr::core::rect<s32>( irr::core::vector2d<s32>(0,rc_canvas[0].texture->getSize().Height - rc_window_size.Height), irr::core::dimension2d<s32>(win_w, win_h) );
#endif // RC_DRIVER_GLES2
//irr::video::SColor color(0);
VideoDriver->draw2DImage(rc_canvas[0].texture, dest, src); VideoDriver->draw2DImage(rc_canvas[0].texture, dest, src);
//draw2DImage2(VideoDriver, rc_canvas[0].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, false, color, screenSize); //draw2DImage2(VideoDriver, rc_canvas[0].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, false, color, screenSize);
//irr::core::rect<irr::s32> src( irr::core::vector2d<irr::s32>(0, 0), rc_canvas[0].texture->getSize() ); //irr::core::rect<irr::s32> src( irr::core::vector2d<irr::s32>(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<irr::s32>(0, 0), 0, true, color, screenSize); //draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, true, color, screenSize);
//VideoDriver->draw2DImage(rc_image[0].image, irr::core::rect<irr::s32>(0,0,100,100), irr::core::rect<irr::s32>(0,0,100,100)); //VideoDriver->draw2DImage(rc_image[0].image, irr::core::rect<irr::s32>(0,0,100,100), irr::core::rect<irr::s32>(0,0,100,100));
//VideoDriver->draw2DRectangle(irr::video::SColor(255,2555,0,0), irr::core::rect<irr::s32>(0,0,100,100)); //VideoDriver->draw2DRectangle(irr::video::SColor(255,255,0,0), irr::core::rect<irr::s32>(0,0,100,100));
//end debug //end debug
//device->getGUIEnvironment()->drawAll(); //device->getGUIEnvironment()->drawAll();

View File

@@ -779,7 +779,7 @@ void rc_setSpriteVisible(int spr_id, bool flag)
if(!rc_sprite[spr_id].active) if(!rc_sprite[spr_id].active)
return; return;
if(rc_sprite[spr_id].image_id) if(rc_sprite[spr_id].image_id >= 0)
rc_sprite[spr_id].visible = flag; rc_sprite[spr_id].visible = flag;
else else
rc_sprite[spr_id].visible = false; rc_sprite[spr_id].visible = false;

View File

@@ -1,5 +1,5 @@
# depslib dependency file v1.0 # 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" "rc_os_defines.h"
<emscripten.h> <emscripten.h>
<sys/param.h> <sys/param.h>
@@ -32,10 +32,10 @@
<irrtheora.h> <irrtheora.h>
"rc_func130_cases.h" "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
<TargetConditionals.h> <TargetConditionals.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 1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
"rc_os_defines.h" "rc_os_defines.h"
@@ -1247,7 +1247,7 @@
1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h 1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
<irrlicht.h> <irrlicht.h>
1733769905 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h 1733938538 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
"SDL.h" "SDL.h"
<SDL2/SDL.h> <SDL2/SDL.h>
<irrlicht.h> <irrlicht.h>
@@ -1271,7 +1271,7 @@
"rc_joints.h" "rc_joints.h"
<irrtheora.h> <irrtheora.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" "SDL.h"
"btBulletDynamicsCommon.h" "btBulletDynamicsCommon.h"
"BulletSoftBody/btSoftRigidDynamicsWorld.h" "BulletSoftBody/btSoftRigidDynamicsWorld.h"
@@ -2272,7 +2272,7 @@
"rc_gfx_core.h" "rc_gfx_core.h"
<irrtheora.h> <irrtheora.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 1724469097 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
"irrBullet.h" "irrBullet.h"
@@ -2487,7 +2487,7 @@
<irrlicht.h> <irrlicht.h>
<cmath> <cmath>
1733590876 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h 1733892344 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h
"SDL.h" "SDL.h"
<SDL2/SDL.h> <SDL2/SDL.h>
"rc_sprite2D.h" "rc_sprite2D.h"
@@ -2531,7 +2531,7 @@
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_particles.h 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" "rc_gfx_core.h"
1731249956 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h 1731249956 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h