Added default material for drawing 2D objects
This commit is contained in:
@@ -4442,7 +4442,12 @@ int main(int argc, char * argv[])
|
|||||||
|
|
||||||
//ogles2 test
|
//ogles2 test
|
||||||
#ifdef RC_TESTING
|
#ifdef RC_TESTING
|
||||||
rc_intern_dirChange("/home/n00b/projects/rcbasic_alpha3/test_project");
|
std::string debug_opt = "a";
|
||||||
|
std::cin >> debug_opt;
|
||||||
|
if(debug_opt.compare("a")==0)
|
||||||
|
rc_intern_dirChange("/home/n00b/Downloads/Shuffleboard/");
|
||||||
|
else
|
||||||
|
rc_intern_dirChange("/home/n00b/projects/rcbasic_alpha3/test_project");
|
||||||
#endif
|
#endif
|
||||||
//---------------
|
//---------------
|
||||||
|
|
||||||
|
|||||||
@@ -868,6 +868,24 @@ void sortCanvasZ()
|
|||||||
//std::cout << std::endl;
|
//std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rc_setActiveCanvas(int canvas_id)
|
||||||
|
{
|
||||||
|
rc_active_canvas = canvas_id;
|
||||||
|
|
||||||
|
if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size())
|
||||||
|
{
|
||||||
|
if(rc_canvas[rc_active_canvas].texture)
|
||||||
|
VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, false, false);
|
||||||
|
|
||||||
|
rc_setDriverMaterial();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int rc_activeCanvas()
|
||||||
|
{
|
||||||
|
return rc_active_canvas;
|
||||||
|
}
|
||||||
|
|
||||||
int rc_canvasOpen(int w, int h, int vx, int vy, int vw, int vh, int mode, int canvas_type=RC_CANVAS_TYPE_2D)
|
int rc_canvasOpen(int w, int h, int vx, int vy, int vw, int vh, int mode, int canvas_type=RC_CANVAS_TYPE_2D)
|
||||||
{
|
{
|
||||||
if(!VideoDriver)
|
if(!VideoDriver)
|
||||||
@@ -962,7 +980,10 @@ int rc_canvasOpen(int w, int h, int vx, int vy, int vw, int vh, int mode, int ca
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(rc_active_canvas < 0)
|
if(rc_active_canvas < 0)
|
||||||
rc_active_canvas = canvas_id;
|
{
|
||||||
|
rc_active_canvas = canvas_id;
|
||||||
|
rc_setActiveCanvas(rc_active_canvas);
|
||||||
|
}
|
||||||
|
|
||||||
for(int i = 0; i < rc_canvas_zOrder.size(); i++)
|
for(int i = 0; i < rc_canvas_zOrder.size(); i++)
|
||||||
{
|
{
|
||||||
@@ -1052,28 +1073,22 @@ void rc_setCanvasPhysics2D(int canvas_id, bool flag)
|
|||||||
rc_canvas[canvas_id].physics2D.enabled = flag;
|
rc_canvas[canvas_id].physics2D.enabled = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rc_setActiveCanvas(int canvas_id)
|
|
||||||
{
|
|
||||||
rc_active_canvas = canvas_id;
|
|
||||||
|
|
||||||
if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size())
|
|
||||||
{
|
|
||||||
if(rc_canvas[rc_active_canvas].texture)
|
|
||||||
VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, false, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int rc_activeCanvas()
|
|
||||||
{
|
|
||||||
return rc_active_canvas;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rc_clearCanvas()
|
void rc_clearCanvas()
|
||||||
{
|
{
|
||||||
if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size())
|
if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size())
|
||||||
{
|
{
|
||||||
if(rc_canvas[rc_active_canvas].texture)
|
if(rc_canvas[rc_active_canvas].texture)
|
||||||
VideoDriver->clearBuffers(true, true, true, rc_clear_color);
|
switch(rc_canvas[rc_active_canvas].type)
|
||||||
|
{
|
||||||
|
case RC_CANVAS_TYPE_2D:
|
||||||
|
VideoDriver->clearBuffers(true, true, true, rc_clear_color);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
VideoDriver->clearBuffers(true, true, true, rc_clear_color);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1438,13 +1453,6 @@ void rc_drawRectFill(int x, int y, int w, int h)
|
|||||||
VideoDriver->draw2DRectangle(rc_active_color, r);
|
VideoDriver->draw2DRectangle(rc_active_color, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rc_drawCircle(int x, int y, double r)
|
|
||||||
{
|
|
||||||
irr::core::vector2d<s32> r_pos(x,y);
|
|
||||||
|
|
||||||
VideoDriver->draw2DPolygon(r_pos, r, rc_active_color, 30);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Filled Circle Code from CuteAlien on Irrlicht forum
|
//Filled Circle Code from CuteAlien on Irrlicht forum
|
||||||
@@ -1476,23 +1484,6 @@ void makeCircle(irr::core::array<irr::video::S3DVertex>& vertices, irr::core::ar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rc_drawCircleFill(int x, int y, double r)
|
|
||||||
{
|
|
||||||
irr::core::vector2d<s32> r_pos(x,y);
|
|
||||||
|
|
||||||
// create the circle
|
|
||||||
irr::core::array<irr::video::S3DVertex> verticesCircle;
|
|
||||||
irr::core::array<irr::u16> indicesCircle;
|
|
||||||
CircleSettings circle;
|
|
||||||
circle.center = r_pos;
|
|
||||||
circle.radius = r;
|
|
||||||
circle.color = rc_active_color;
|
|
||||||
makeCircle(verticesCircle, indicesCircle, circle);
|
|
||||||
|
|
||||||
VideoDriver->draw2DVertexPrimitiveList(verticesCircle.pointer(), verticesCircle.size(),
|
|
||||||
indicesCircle.pointer(), indicesCircle.size()-2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN,
|
|
||||||
video::EIT_16BIT);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rc_drawLine(int x1, int y1, int x2, int y2)
|
void rc_drawLine(int x1, int y1, int x2, int y2)
|
||||||
{
|
{
|
||||||
@@ -1542,8 +1533,8 @@ void makeEllipse(irr::core::array<irr::video::S3DVertex>& vertices, irr::core::a
|
|||||||
int ry = settings.radius;
|
int ry = settings.radius;
|
||||||
for ( u32 i=1; i < settings.numVertices; i++ )
|
for ( u32 i=1; i < settings.numVertices; i++ )
|
||||||
{
|
{
|
||||||
irr::f32 x = rx * std::cos( radians(i*stepSize) ) + centerf.Y ;
|
irr::f32 x = rx * std::cos( radians(i*stepSize) ) + centerf.X ;
|
||||||
irr::f32 y = ry * std::sin( radians(i*stepSize) ) + centerf.X ;
|
irr::f32 y = ry * std::sin( radians(i*stepSize) ) + centerf.Y ;
|
||||||
|
|
||||||
vertices[i] = video::S3DVertex(x, y, 0.f, 0.f, 1.f, 0.f, settings.color, 0.5f, 0.5f);
|
vertices[i] = video::S3DVertex(x, y, 0.f, 0.f, 1.f, 0.f, settings.color, 0.5f, 0.5f);
|
||||||
}
|
}
|
||||||
@@ -1566,6 +1557,7 @@ void rc_drawEllipse(int x, int y, int rx, int ry)
|
|||||||
|
|
||||||
for(int i = 2; i < verticesCircle.size(); i++)
|
for(int i = 2; i < verticesCircle.size(); i++)
|
||||||
{
|
{
|
||||||
|
//std::cout << "V[" << i << "] = (" << verticesCircle[i-1].Pos.X << ", " << verticesCircle[i-1].Pos.Y << ") (" << verticesCircle[i].Pos.X << ", " << verticesCircle[i].Pos.Y << ")" << std::endl;
|
||||||
rc_drawLine(verticesCircle[i-1].Pos.X, verticesCircle[i-1].Pos.Y, verticesCircle[i].Pos.X, verticesCircle[i].Pos.Y);
|
rc_drawLine(verticesCircle[i-1].Pos.X, verticesCircle[i-1].Pos.Y, verticesCircle[i].Pos.X, verticesCircle[i].Pos.Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1573,6 +1565,7 @@ void rc_drawEllipse(int x, int y, int rx, int ry)
|
|||||||
rc_drawLine(verticesCircle[n].Pos.X, verticesCircle[n].Pos.Y, verticesCircle[1].Pos.X, verticesCircle[1].Pos.Y);
|
rc_drawLine(verticesCircle[n].Pos.X, verticesCircle[n].Pos.Y, verticesCircle[1].Pos.X, verticesCircle[1].Pos.Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void rc_drawEllipseFill(int x, int y, int rx, int ry)
|
void rc_drawEllipseFill(int x, int y, int rx, int ry)
|
||||||
{
|
{
|
||||||
irr::core::vector2d<s32> r_pos(x,y);
|
irr::core::vector2d<s32> r_pos(x,y);
|
||||||
@@ -1593,6 +1586,31 @@ void rc_drawEllipseFill(int x, int y, int rx, int ry)
|
|||||||
video::EIT_16BIT);
|
video::EIT_16BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rc_drawCircle(int x, int y, double r)
|
||||||
|
{
|
||||||
|
rc_drawEllipse(x, y, r, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rc_drawCircleFill(int x, int y, double r)
|
||||||
|
{
|
||||||
|
rc_drawEllipseFill(x, y, r, r);
|
||||||
|
return;
|
||||||
|
|
||||||
|
irr::core::vector2d<s32> r_pos(x,y);
|
||||||
|
|
||||||
|
// create the circle
|
||||||
|
irr::core::array<irr::video::S3DVertex> verticesCircle;
|
||||||
|
irr::core::array<irr::u16> indicesCircle;
|
||||||
|
CircleSettings circle;
|
||||||
|
circle.center = r_pos;
|
||||||
|
circle.radius = r;
|
||||||
|
circle.color = rc_active_color;
|
||||||
|
makeCircle(verticesCircle, indicesCircle, circle);
|
||||||
|
|
||||||
|
VideoDriver->draw2DVertexPrimitiveList(verticesCircle.pointer(), verticesCircle.size(),
|
||||||
|
indicesCircle.pointer(), indicesCircle.size()-2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN,
|
||||||
|
video::EIT_16BIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int rc_loadFont(std::string fnt_file, int font_size)
|
int rc_loadFont(std::string fnt_file, int font_size)
|
||||||
@@ -2314,6 +2332,7 @@ void rc_getImageBuffer(int img_id, double * pdata)
|
|||||||
void rc_setBilinearFilter(bool flag)
|
void rc_setBilinearFilter(bool flag)
|
||||||
{
|
{
|
||||||
rc_bilinear_filter = flag;
|
rc_bilinear_filter = flag;
|
||||||
|
rc_setDriverMaterial();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rc_getBilinearFilter()
|
bool rc_getBilinearFilter()
|
||||||
@@ -2361,6 +2380,8 @@ void rc_setBlendMode(int blend_mode)
|
|||||||
case 8: rc_blend_mode = EBO_MIN_ALPHA; break;
|
case 8: rc_blend_mode = EBO_MIN_ALPHA; break;
|
||||||
case 9: rc_blend_mode = EBO_MAX_ALPHA; break;
|
case 9: rc_blend_mode = EBO_MAX_ALPHA; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc_setDriverMaterial();
|
||||||
}
|
}
|
||||||
|
|
||||||
int rc_getBlendMode()
|
int rc_getBlendMode()
|
||||||
|
|||||||
@@ -738,6 +738,28 @@ irr::video::E_BLEND_OPERATION rc_blend_mode = irr::video::EBO_ADD;
|
|||||||
bool rc_bilinear_filter = false;
|
bool rc_bilinear_filter = false;
|
||||||
|
|
||||||
|
|
||||||
|
void rc_setDriverMaterial()
|
||||||
|
{
|
||||||
|
if(!VideoDriver)
|
||||||
|
return;
|
||||||
|
|
||||||
|
irr::video::SMaterial material;
|
||||||
|
material.Lighting = false;
|
||||||
|
material.ZWriteEnable = irr::video::EZW_OFF;
|
||||||
|
material.ZBuffer = false;
|
||||||
|
material.BackfaceCulling = false;
|
||||||
|
material.TextureLayer[0].Texture = 0;
|
||||||
|
material.TextureLayer[0].BilinearFilter = rc_bilinear_filter;
|
||||||
|
material.MaterialTypeParam = irr::video::pack_textureBlendFunc(irr::video::EBF_SRC_ALPHA, irr::video::EBF_ONE_MINUS_SRC_ALPHA, irr::video::EMFN_MODULATE_1X, irr::video::EAS_TEXTURE | irr::video::EAS_VERTEX_COLOR);
|
||||||
|
material.BlendOperation = rc_blend_mode;
|
||||||
|
material.BlendOperation = irr::video::EBO_ADD;
|
||||||
|
|
||||||
|
material.MaterialType = irr::video::EMT_ONETEXTURE_BLEND;
|
||||||
|
|
||||||
|
VideoDriver->setMaterial(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void draw2DImage(irr::video::IVideoDriver *driver, irr::video::ITexture* texture, irr::core::rect<irr::s32> sourceRect, irr::core::position2d<irr::s32> position, irr::core::position2d<irr::s32> rotationPoint, irr::f32 rotation, irr::core::vector2df scale, bool useAlphaChannel, irr::video::SColor color, irr::core::vector2d<irr::f32> screenSize)
|
void draw2DImage(irr::video::IVideoDriver *driver, irr::video::ITexture* texture, irr::core::rect<irr::s32> sourceRect, irr::core::position2d<irr::s32> position, irr::core::position2d<irr::s32> rotationPoint, irr::f32 rotation, irr::core::vector2df scale, bool useAlphaChannel, irr::video::SColor color, irr::core::vector2d<irr::f32> screenSize)
|
||||||
{
|
{
|
||||||
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
|
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
|
||||||
@@ -826,6 +848,8 @@ void draw2DImage(irr::video::IVideoDriver *driver, irr::video::ITexture* texture
|
|||||||
driver->setTransform(irr::video::ETS_PROJECTION,oldProjMat);
|
driver->setTransform(irr::video::ETS_PROJECTION,oldProjMat);
|
||||||
driver->setTransform(irr::video::ETS_VIEW,oldViewMat);
|
driver->setTransform(irr::video::ETS_VIEW,oldViewMat);
|
||||||
driver->setTransform(irr::video::ETS_WORLD,oldWorldMat);
|
driver->setTransform(irr::video::ETS_WORLD,oldWorldMat);
|
||||||
|
|
||||||
|
rc_setDriverMaterial();
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw2DImage2(irr::video::IVideoDriver *driver, irr::video::ITexture* texture, irr::core::rect<irr::s32> sourceRect, irr::core::rect<irr::s32> destRect, irr::core::position2d<irr::s32> rotationPoint, irr::f32 rotation, bool useAlphaChannel, irr::video::SColor color, irr::core::vector2d<irr::f32> screenSize )
|
void draw2DImage2(irr::video::IVideoDriver *driver, irr::video::ITexture* texture, irr::core::rect<irr::s32> sourceRect, irr::core::rect<irr::s32> destRect, irr::core::position2d<irr::s32> rotationPoint, irr::f32 rotation, bool useAlphaChannel, irr::video::SColor color, irr::core::vector2d<irr::f32> screenSize )
|
||||||
@@ -916,6 +940,8 @@ void draw2DImage2(irr::video::IVideoDriver *driver, irr::video::ITexture* textur
|
|||||||
driver->setTransform(irr::video::ETS_PROJECTION,oldProjMat);
|
driver->setTransform(irr::video::ETS_PROJECTION,oldProjMat);
|
||||||
driver->setTransform(irr::video::ETS_VIEW,oldViewMat);
|
driver->setTransform(irr::video::ETS_VIEW,oldViewMat);
|
||||||
driver->setTransform(irr::video::ETS_WORLD,oldWorldMat);
|
driver->setTransform(irr::video::ETS_WORLD,oldWorldMat);
|
||||||
|
|
||||||
|
rc_setDriverMaterial();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define RC_OS_DEFINES_H_INCLUDED
|
#define RC_OS_DEFINES_H_INCLUDED
|
||||||
|
|
||||||
//USED FOR TESTING ONLY
|
//USED FOR TESTING ONLY
|
||||||
#define RC_TESTING
|
//#define RC_TESTING
|
||||||
|
|
||||||
//I am checking Android first since I think it also defines __linux__
|
//I am checking Android first since I think it also defines __linux__
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# depslib dependency file v1.0
|
# depslib dependency file v1.0
|
||||||
1731732087 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
|
1732327607 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>
|
||||||
@@ -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>
|
||||||
|
|
||||||
1731729981 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
|
1732372520 /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>
|
||||||
|
|
||||||
1731727404 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
|
1732372339 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
|
||||||
"SDL.h"
|
"SDL.h"
|
||||||
"btBulletDynamicsCommon.h"
|
"btBulletDynamicsCommon.h"
|
||||||
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
|
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user