diff --git a/rcbasic_runtime/rc_gfx.h b/rcbasic_runtime/rc_gfx.h index 144850b..9dc0a1d 100644 --- a/rcbasic_runtime/rc_gfx.h +++ b/rcbasic_runtime/rc_gfx.h @@ -306,7 +306,14 @@ bool rc_windowOpenEx(std::string title, int x, int y, int w, int h, uint32_t win rc_canvas_obj back_buffer; //std::cout << std::endl << "back start" << std::endl; + #ifdef RC_WEB + Uint32 size_n = 2; + Uint32 dim_max = (w > h ? w : h); + while(size_n < dim_max) size_n *= 2; + back_buffer.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)size_n, (irr::u32)size_n), "rt", ECF_A8R8G8B8); + #else back_buffer.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)w, (irr::u32)h), "rt", ECF_A8R8G8B8); + #endif // RC_WEB //std::cout << "back_buffer done" << std::endl << std::endl; back_buffer.dimension.Width = w; back_buffer.dimension.Height = h; @@ -886,7 +893,14 @@ int rc_canvasOpen(int w, int h, int vx, int vy, int vw, int vh, int mode, int ca canvas.show3D = false; canvas.physics2D.enabled = false; + #ifdef RC_WEB + Uint32 size_n = 2; + Uint32 dim_max = (w > h ? w : h); + while(size_n < dim_max) size_n *= 2; + 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); + #endif // RC_WEB //canvas.sprite_layer = VideoDriver->addRenderTargetTexture(irr::core::dimension2d(w,h), "rt", ECF_A8R8G8B8); if(!canvas.texture) @@ -3390,10 +3404,12 @@ bool rc_update() VideoDriver->setRenderTarget(rc_canvas[0].texture); irr::core::vector2d bb_position(0,0); - irr::core::dimension2d bb_dimension(win_w, win_h); + irr::core::dimension2d bb_dimension = rc_canvas[0].texture->getSize(); + irr::core::dimension2d win_dimension(win_w, win_h); VideoDriver->setViewPort( irr::core::rect(bb_position, bb_dimension) ); irr::core::vector2d screenSize( (irr::f32) rc_canvas[0].dimension.Width, (irr::f32) rc_canvas[0].dimension.Height ); + //irr::core::vector2d screenSize( (irr::f32) win_h, (irr::f32) win_w ); Uint32 current_time_ms = SDL_GetTicks(); double frame_current_time = ((double)current_time_ms)/1000.0; @@ -3449,12 +3465,13 @@ bool rc_update() rc_canvas[i].camera.update(); - VideoDriver->setViewPort(irr::core::rect(0,0,rc_canvas[i].viewport.dimension.Width,rc_canvas[i].viewport.dimension.Height)); + VideoDriver->setViewPort(irr::core::rect(0,0,rc_canvas[i].texture->getSize().Width,rc_canvas[i].texture->getSize().Height)); //irr::core::rect viewport(irr::core::position, rc_canvas[i].viewport.dimension); //VideoDriver->setViewPort(viewport); SceneManager->drawAll(); + //VideoDriver->draw2DRectangle(irr::video::SColor(255,0,255,0), irr::core::rect(10,40,100,500)); vector3df p0(0, 0, 0); vector3df p1(10, 30, 0); @@ -3480,7 +3497,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 << "]" << 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].dimension.Height << ")" << std::endl; if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_SPRITE) { @@ -3490,9 +3507,21 @@ bool rc_update() } #if defined(RC_DRIVER_GLES2) - irr::core::vector2d c_pos( dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y + dest.getHeight() ); - irr::core::position2d rot_point(src.getWidth()/2, src.getHeight()/2); - draw2DImage(VideoDriver, rc_canvas[canvas_id].texture, src, c_pos, rot_point, 0, irr::core::vector2df(1, -1), true, color, screenSize); + if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_3D) + { + src = irr::core::rect( irr::core::vector2d(0, 0), rc_canvas[canvas_id].texture->getSize() ); + dest = irr::core::rect( irr::core::vector2d(dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y + dest.getHeight()), irr::core::dimension2d(dest.getWidth(), -1*dest.getHeight()) ); + } + else if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_2D) + { + irr::core::dimension2d cv_dim = rc_canvas[canvas_id].viewport.dimension; + irr::core::position2d cv_pos = rc_canvas[canvas_id].viewport.position; + irr::core::vector2d cv_offset(rc_canvas[canvas_id].offset.X, rc_canvas[canvas_id].texture->getSize().Height - rc_canvas[canvas_id].offset.Y - cv_dim.Height); + src = irr::core::rect( cv_offset, cv_dim ); + dest = irr::core::rect( irr::core::vector2d(cv_pos.X, cv_pos.Y + cv_dim.Height), irr::core::dimension2d(cv_dim.Width, -1*cv_dim.Height) ); + } + //dest = irr::core::rect( irr::core::vector2d(dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y + dest.getHeight()), irr::core::dimension2d(dest.getWidth(), -1*dest.getHeight()) ); + draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d(0, 0), 0, true, color, screenSize); #else draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d(0, 0), 0, true, color, screenSize); #endif // defined @@ -3507,12 +3536,22 @@ bool rc_update() } //env->drawAll(); + //VideoDriver->draw2DRectangle(irr::video::SColor(255,255,0,0), irr::core::rect(0,0,100,500)); VideoDriver->setRenderTarget(0); //VideoDriver->beginScene(true, true); - VideoDriver->draw2DImage(rc_canvas[0].texture, irr::core::vector2d(0,0)); + //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() ); + irr::core::rect dest( irr::core::vector2d(0,0), irr::core::dimension2d(win_w, win_h) ); + 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() ); + //irr::core::rect dest( irr::core::vector2d(0, 0), irr::core::dimension2d( ); + //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)); //end debug diff --git a/rcbasic_runtime/rc_os_defines.h b/rcbasic_runtime/rc_os_defines.h index 3a94755..701d0f8 100755 --- a/rcbasic_runtime/rc_os_defines.h +++ b/rcbasic_runtime/rc_os_defines.h @@ -2,7 +2,7 @@ #define RC_OS_DEFINES_H_INCLUDED #define RC_LINUX -//#define RC_WEB +#define RC_WEB //#define RC_WINDOWS //#define RC_ANDROID //#define RC_MAC @@ -23,7 +23,7 @@ #endif //FOR DEBUG PURPOSES -//#define RC_DRIVER_GLES2 +#define RC_DRIVER_GLES2 #define RC_PI 3.14159265359 diff --git a/rcbasic_runtime/rcbasic_runtime.depend b/rcbasic_runtime/rcbasic_runtime.depend index c0dbd57..de87292 100755 --- a/rcbasic_runtime/rcbasic_runtime.depend +++ b/rcbasic_runtime/rcbasic_runtime.depend @@ -1,5 +1,5 @@ # depslib dependency file v1.0 -1731256787 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp +1731339939 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp "rc_os_defines.h" @@ -32,7 +32,7 @@ "rc_func130_cases.h" -1731347776 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h +1731467785 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h 1730315467 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h @@ -1246,7 +1246,7 @@ 1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h -1731294351 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h +1731468622 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h "SDL.h" @@ -2486,7 +2486,7 @@ -1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h +1731380776 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h "SDL.h" "rc_sprite2D.h" diff --git a/rcbasic_runtime/rcbasic_runtime.layout b/rcbasic_runtime/rcbasic_runtime.layout index e0e7fb2..dd7076f 100755 --- a/rcbasic_runtime/rcbasic_runtime.layout +++ b/rcbasic_runtime/rcbasic_runtime.layout @@ -2,19 +2,9 @@ - + - - - - - - - - - - - + @@ -22,129 +12,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - + @@ -152,4 +27,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +