diff --git a/src/CMakeOptions.txt b/src/CMakeOptions.txt index 7fc7a9154..00fc79043 100644 --- a/src/CMakeOptions.txt +++ b/src/CMakeOptions.txt @@ -25,6 +25,7 @@ set_property(CACHE OPENGL_VERSION PROPERTY STRINGS "3.3" "2.1" "1.1" "ES 2.0") option(SUPPORT_BUSY_WAIT_LOOP "Use busy wait loop for timing sync instead of a high-resolution timer" ON) option(SUPPORT_CAMERA_SYSTEM "Provide camera module (camera.h) with multiple predefined cameras: free, 1st/3rd person, orbital" ON) option(SUPPORT_DEFAULT_FONT "Default font is loaded on window initialization to be available for the user to render simple text. If enabled, uses external module functions to load default raylib font (module: text)" ON) +option(SUPPORT_SCREEN_CAPTURE "Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()" ON) option(SUPPORT_GIF_RECORDING "Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback()" ON) option(SUPPORT_GESTURES_SYSTEM "Gestures module is included (gestures.h) to support gestures detection: tap, hold, swipe, drag" ON) option(SUPPORT_MOUSE_GESTURES "Mouse gestures are directly mapped like touches and processed by gestures system" ON) @@ -33,10 +34,9 @@ option(SUPPORT_MOUSE_GESTURES "Mouse gestures are directly mapped like touches a option(SUPPORT_VR_SIMULATOR "Support VR simulation functionality (stereo rendering)" ON) option(SUPPORT_DISTORTION_SHADER "Include stereo rendering distortion shader (shader_distortion.h)" ON) -# models.c -option(SUPPORT_FILEFORMAT_OBJ "Support loading OBJ file format" ON) -option(SUPPORT_FILEFORMAT_MTL "Support loading MTL file format" ON) -option(SUPPORT_MESH_GENERATION "Support procedural mesh generation functions, uses external par_shapes.h library. NOTE: Some generated meshes DO NOT include generated texture coordinates" ON) +# shapes.c +option(SUPPORT_FONT_TEXTURE "Draw rectangle shapes using font texture white character instead of default white texture. Allows drawing rectangles and text with a single draw call, very useful for GUI systems!" ON) +option(SUPPORT_QUADS_DRAW_MODE "Use QUADS instead of TRIANGLES for drawing when possible. Some lines-based shapes could still use lines" ON) # textures.c option(SUPPORT_IMAGE_GENERATION "Support proedural image generation functionality (gradient, spot, perlin-noise, cellular)" ON) @@ -53,6 +53,11 @@ option(SUPPORT_FILEFORMAT_PSD "Support loading PSD as textures" OFF) option(SUPPORT_FILEFORMAT_PKM "Support loading PKM as textures" OFF) option(SUPPORT_FILEFORMAT_PVR "Support loading PVR as textures" OFF) +# models.c +option(SUPPORT_FILEFORMAT_OBJ "Support loading OBJ file format" ON) +option(SUPPORT_FILEFORMAT_MTL "Support loading MTL file format" ON) +option(SUPPORT_MESH_GENERATION "Support procedural mesh generation functions, uses external par_shapes.h library. NOTE: Some generated meshes DO NOT include generated texture coordinates" ON) + # audio.c option(SUPPORT_FILEFORMAT_WAV "Support loading WAV for sound" ON) option(SUPPORT_FILEFORMAT_OGG "Support loading OGG for sound" ON) @@ -60,9 +65,6 @@ option(SUPPORT_FILEFORMAT_XM "Support loading XM for sound" ON) option(SUPPORT_FILEFORMAT_MOD "Support loading MOD for sound" ON) option(SUPPORT_FILEFORMAT_FLAC "Support loading FLAC for sound" OFF) -# shapes.c -option(USE_DEFAULT_FONT_TEXTURE "Draw rectangle shapes using font texture white character instead of default white texture. Allows drawing rectangles and text with a single draw call, very useful for GUI systems!" ON) - # utils.c option(SUPPORT_SAVE_PNG "Support saving image data in PNG file format" ON) option(SUPPORT_SAVE_BMP "Support saving image data in BMP file format" OFF) diff --git a/src/config.h b/src/config.h index 5f8adcff5..d094e6b17 100644 --- a/src/config.h +++ b/src/config.h @@ -59,6 +59,16 @@ #define SUPPORT_DISTORTION_SHADER 1 +//------------------------------------------------------------------------------------ +// Module: shapes - Configuration Flags +//------------------------------------------------------------------------------------ +// Draw rectangle shapes using font texture white character instead of default white texture +// Allows drawing rectangles and text with a single draw call, very useful for GUI systems! +#define SUPPORT_FONT_TEXTURE +// Use QUADS instead of TRIANGLES for drawing when possible +// Some lines-based shapes could still use lines +#define SUPPORT_QUADS_DRAW_MODE + //------------------------------------------------------------------------------------ // Module: textures - Configuration Flags //------------------------------------------------------------------------------------ diff --git a/src/config.h.in b/src/config.h.in index 5b6ed0546..651024c19 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -1,11 +1,28 @@ /* config.h.in */ -// text.c -/* Default font is loaded on window initialization to be available for the user to render simple text. NOTE: If enabled, uses external module functions to load default raylib font (module: text) */ -#cmakedefine SUPPORT_DEFAULT_FONT 1 -/* Selected desired fileformats to be supported for loading. */ -#cmakedefine SUPPORT_FILEFORMAT_FNT 1 -#cmakedefine SUPPORT_FILEFORMAT_TTF 1 +// core.c +/* Camera module is included (camera.h) and multiple predefined cameras are available: free, 1st/3rd person, orbital */ +#cmakedefine SUPPORT_CAMERA_SYSTEM 1 +/* Gestures module is included (gestures.h) to support gestures detection: tap, hold, swipe, drag */ +#cmakedefine SUPPORT_GESTURES_SYSTEM 1 +/* Mouse gestures are directly mapped like touches and processed by gestures system. */ +#cmakedefine SUPPORT_MOUSE_GESTURES 1 +/* Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used */ +#cmakedefine SUPPORT_BUSY_WAIT_LOOP 1 +/* Allow automatic screen capture of current screen pressing F12, defined in KeyCallback() */ +#cmakedefine SUPPORT_SCREEN_CAPTURE 1 +/* Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback() */ +#cmakedefine SUPPORT_GIF_RECORDING 1 + +// rlgl.c +/* Support VR simulation functionality (stereo rendering) */ +#cmakedefine SUPPORT_VR_SIMULATOR 1 +/* Include stereo rendering distortion shader (shader_distortion.h) */ +#cmakedefine SUPPORT_DISTORTION_SHADER 1 + +// shapes.c +#cmakedefine SUPPORT_FONT_TEXTURE 1 +#cmakedefine SUPPORT_QUADS_DRAW_MODE 1 // textures.c /* Selecte desired fileformats to be supported for image data loading. */ @@ -28,23 +45,20 @@ /* Support proedural image generation functionality (gradient, spot, perlin-noise, cellular) */ #cmakedefine SUPPORT_IMAGE_GENERATION 1 -// rlgl.c -/* Support VR simulation functionality (stereo rendering) */ -#cmakedefine SUPPORT_VR_SIMULATOR 1 -/* Include stereo rendering distortion shader (shader_distortion.h) */ -#cmakedefine SUPPORT_DISTORTION_SHADER 1 +// text.c +/* Default font is loaded on window initialization to be available for the user to render simple text. NOTE: If enabled, uses external module functions to load default raylib font (module: text) */ +#cmakedefine SUPPORT_DEFAULT_FONT 1 +/* Selected desired fileformats to be supported for loading. */ +#cmakedefine SUPPORT_FILEFORMAT_FNT 1 +#cmakedefine SUPPORT_FILEFORMAT_TTF 1 -// core.c -/* Camera module is included (camera.h) and multiple predefined cameras are available: free, 1st/3rd person, orbital */ -#cmakedefine SUPPORT_CAMERA_SYSTEM 1 -/* Gestures module is included (gestures.h) to support gestures detection: tap, hold, swipe, drag */ -#cmakedefine SUPPORT_GESTURES_SYSTEM 1 -/* Mouse gestures are directly mapped like touches and processed by gestures system. */ -#cmakedefine SUPPORT_MOUSE_GESTURES 1 -/* Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used */ -#cmakedefine SUPPORT_BUSY_WAIT_LOOP 1 -/* Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback() */ -#cmakedefine SUPPORT_GIF_RECORDING 1 +// models.c +/* Selected desired fileformats to be supported for loading. */ +#cmakedefine SUPPORT_FILEFORMAT_OBJ 1 +#cmakedefine SUPPORT_FILEFORMAT_MTL 1 +/* Support procedural mesh generation functions, uses external par_shapes.h library + * NOTE: Some generated meshes DO NOT include generated texture coordinates */ +#cmakedefine SUPPORT_MESH_GENERATION 1 // audio.c /* Desired fileformats to be supported for loading. */ @@ -54,20 +68,9 @@ #cmakedefine SUPPORT_FILEFORMAT_MOD 1 #cmakedefine SUPPORT_FILEFORMAT_FLAC 1 -// models.c -/* Selected desired fileformats to be supported for loading. */ -#cmakedefine SUPPORT_FILEFORMAT_OBJ 1 -#cmakedefine SUPPORT_FILEFORMAT_MTL 1 - -/* Support procedural mesh generation functions, uses external par_shapes.h library - * NOTE: Some generated meshes DO NOT include generated texture coordinates - */ -#cmakedefine SUPPORT_MESH_GENERATION 1 - // utils.c /* Show TraceLog() output messages. NOTE: By default LOG_DEBUG traces not shown */ #cmakedefine SUPPORT_TRACELOG 1 - /* Support saving image data as PNG fileformat. NOTE: Requires stb_image_write library */ #cmakedefine SUPPORT_SAVE_PNG 1 /* Support saving image data as PMP fileformat. NOTE: Requires stb_image_write library */ diff --git a/src/shapes.c b/src/shapes.c index a1bc7098c..d8e52b044 100644 --- a/src/shapes.c +++ b/src/shapes.c @@ -4,10 +4,13 @@ * * CONFIGURATION: * -* #define USE_DEFAULT_FONT_TEXTURE +* #define SUPPORT_FONT_TEXTURE * Draw rectangle shapes using font texture white character instead of default white texture * Allows drawing rectangles and text with a single draw call, very useful for GUI systems! * +* #define SUPPORT_QUADS_DRAW_MODE +* Use QUADS instead of TRIANGLES for drawing when possible. +* Some lines-based shapes could still use lines * * LICENSE: zlib/libpng * @@ -30,13 +33,12 @@ * **********************************************************************************************/ -#include "config.h" - -#include "raylib.h" +#include "config.h" // Defines module configuration flags +#include "raylib.h" // Declares module functions #include "rlgl.h" // raylib OpenGL abstraction layer to OpenGL 1.1, 2.1, 3.3+ or ES2 -#include // Required for: abs() +#include // Required for: abs(), fabs() #include // Required for: sinf(), cosf(), sqrtf() //---------------------------------------------------------------------------------- @@ -188,37 +190,34 @@ void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Co // NOTE: On OpenGL 3.3 and ES2 we use QUADS to avoid drawing order issues (view rlglDraw) void DrawCircleV(Vector2 center, float radius, Color color) { - if (rlGetVersion() == OPENGL_11) - { - rlBegin(RL_TRIANGLES); - for (int i = 0; i < 360; i += 10) - { - rlColor4ub(color.r, color.g, color.b, color.a); - - rlVertex2f(center.x, center.y); - rlVertex2f(center.x + sinf(DEG2RAD*i)*radius, center.y + cosf(DEG2RAD*i)*radius); - rlVertex2f(center.x + sinf(DEG2RAD*(i + 10))*radius, center.y + cosf(DEG2RAD*(i + 10))*radius); - } - rlEnd(); - } - else if ((rlGetVersion() == OPENGL_21) || (rlGetVersion() == OPENGL_33) || (rlGetVersion() == OPENGL_ES_20)) - { - rlEnableTexture(GetTextureDefault().id); // Default white texture +#if defined(SUPPORT_QUADS_DRAW_MODE) + rlEnableTexture(GetTextureDefault().id); // Default white texture - rlBegin(RL_QUADS); - for (int i = 0; i < 360; i += 20) - { - rlColor4ub(color.r, color.g, color.b, color.a); - - rlVertex2f(center.x, center.y); - rlVertex2f(center.x + sinf(DEG2RAD*i)*radius, center.y + cosf(DEG2RAD*i)*radius); - rlVertex2f(center.x + sinf(DEG2RAD*(i + 10))*radius, center.y + cosf(DEG2RAD*(i + 10))*radius); - rlVertex2f(center.x + sinf(DEG2RAD*(i + 20))*radius, center.y + cosf(DEG2RAD*(i + 20))*radius); - } - rlEnd(); + rlBegin(RL_QUADS); + for (int i = 0; i < 360; i += 20) + { + rlColor4ub(color.r, color.g, color.b, color.a); + + rlVertex2f(center.x, center.y); + rlVertex2f(center.x + sinf(DEG2RAD*i)*radius, center.y + cosf(DEG2RAD*i)*radius); + rlVertex2f(center.x + sinf(DEG2RAD*(i + 10))*radius, center.y + cosf(DEG2RAD*(i + 10))*radius); + rlVertex2f(center.x + sinf(DEG2RAD*(i + 20))*radius, center.y + cosf(DEG2RAD*(i + 20))*radius); + } + rlEnd(); - rlDisableTexture(); - } + rlDisableTexture(); +#else + rlBegin(RL_TRIANGLES); + for (int i = 0; i < 360; i += 10) + { + rlColor4ub(color.r, color.g, color.b, color.a); + + rlVertex2f(center.x, center.y); + rlVertex2f(center.x + sinf(DEG2RAD*i)*radius, center.y + cosf(DEG2RAD*i)*radius); + rlVertex2f(center.x + sinf(DEG2RAD*(i + 10))*radius, center.y + cosf(DEG2RAD*(i + 10))*radius); + } + rlEnd(); +#endif } // Draw circle outline @@ -249,72 +248,69 @@ void DrawRectangle(int posX, int posY, int width, int height, Color color) // NOTE: On OpenGL 3.3 and ES2 we use QUADS to avoid drawing order issues (view rlglDraw) void DrawRectangleV(Vector2 position, Vector2 size, Color color) { - if (rlGetVersion() == OPENGL_11) - { - rlBegin(RL_TRIANGLES); - rlColor4ub(color.r, color.g, color.b, color.a); +#if defined(SUPPORT_QUADS_DRAW_MODE) + #if defined(SUPPORT_FONT_TEXTURE) + // Draw rectangle using font texture white character + rlEnableTexture(GetDefaultFont().texture.id); - rlVertex2i(position.x, position.y); - rlVertex2i(position.x, position.y + size.y); - rlVertex2i(position.x + size.x, position.y + size.y); + rlBegin(RL_QUADS); + rlColor4ub(color.r, color.g, color.b, color.a); + rlNormal3f(0.0f, 0.0f, 1.0f); - rlVertex2i(position.x, position.y); - rlVertex2i(position.x + size.x, position.y + size.y); - rlVertex2i(position.x + size.x, position.y); - rlEnd(); - } - else if ((rlGetVersion() == OPENGL_21) || (rlGetVersion() == OPENGL_33) || (rlGetVersion() == OPENGL_ES_20)) - { -#if defined(USE_DEFAULT_FONT_TEXTURE) - // Draw rectangle using font texture white character - rlEnableTexture(GetDefaultFont().texture.id); - - rlBegin(RL_QUADS); - rlColor4ub(color.r, color.g, color.b, color.a); - rlNormal3f(0.0f, 0.0f, 1.0f); - - // NOTE: Default raylib font character 95 is a white square - rlTexCoord2f((float)GetDefaultFont().chars[95].rec.x/GetDefaultFont().texture.width, - (float)GetDefaultFont().chars[95].rec.y/GetDefaultFont().texture.height); - rlVertex2f(position.x, position.y); - - rlTexCoord2f((float)GetDefaultFont().chars[95].rec.x/GetDefaultFont().texture.width, - (float)(GetDefaultFont().chars[95].rec.y + GetDefaultFont().chars[95].rec.height)/GetDefaultFont().texture.height); - rlVertex2f(position.x, position.y + size.y); - - rlTexCoord2f((float)(GetDefaultFont().chars[95].rec.x + GetDefaultFont().chars[95].rec.width)/GetDefaultFont().texture.width, - (float)(GetDefaultFont().chars[95].rec.y + GetDefaultFont().chars[95].rec.height)/GetDefaultFont().texture.height); - rlVertex2f(position.x + size.x, position.y + size.y); - - rlTexCoord2f((float)(GetDefaultFont().chars[95].rec.x + GetDefaultFont().chars[95].rec.width)/GetDefaultFont().texture.width, - (float)GetDefaultFont().chars[95].rec.y/GetDefaultFont().texture.height); - rlVertex2f(position.x + size.x, position.y); - rlEnd(); + // NOTE: Default raylib font character 95 is a white square + rlTexCoord2f((float)GetDefaultFont().chars[95].rec.x/GetDefaultFont().texture.width, + (float)GetDefaultFont().chars[95].rec.y/GetDefaultFont().texture.height); + rlVertex2f(position.x, position.y); - rlDisableTexture(); + rlTexCoord2f((float)GetDefaultFont().chars[95].rec.x/GetDefaultFont().texture.width, + (float)(GetDefaultFont().chars[95].rec.y + GetDefaultFont().chars[95].rec.height)/GetDefaultFont().texture.height); + rlVertex2f(position.x, position.y + size.y); + + rlTexCoord2f((float)(GetDefaultFont().chars[95].rec.x + GetDefaultFont().chars[95].rec.width)/GetDefaultFont().texture.width, + (float)(GetDefaultFont().chars[95].rec.y + GetDefaultFont().chars[95].rec.height)/GetDefaultFont().texture.height); + rlVertex2f(position.x + size.x, position.y + size.y); + + rlTexCoord2f((float)(GetDefaultFont().chars[95].rec.x + GetDefaultFont().chars[95].rec.width)/GetDefaultFont().texture.width, + (float)GetDefaultFont().chars[95].rec.y/GetDefaultFont().texture.height); + rlVertex2f(position.x + size.x, position.y); + rlEnd(); + + rlDisableTexture(); + #else + rlEnableTexture(GetTextureDefault().id); // Default white texture + + rlBegin(RL_QUADS); + rlColor4ub(color.r, color.g, color.b, color.a); + rlNormal3f(0.0f, 0.0f, 1.0f); + + rlTexCoord2f(0.0f, 0.0f); + rlVertex2f(position.x, position.y); + + rlTexCoord2f(0.0f, 1.0f); + rlVertex2f(position.x, position.y + size.y); + + rlTexCoord2f(1.0f, 1.0f); + rlVertex2f(position.x + size.x, position.y + size.y); + + rlTexCoord2f(1.0f, 0.0f); + rlVertex2f(position.x + size.x, position.y); + rlEnd(); + + rlDisableTexture(); + #endif // SUPPORT_FONT_TEXTURE #else - rlEnableTexture(GetTextureDefault().id); // Default white texture + rlBegin(RL_TRIANGLES); + rlColor4ub(color.r, color.g, color.b, color.a); - rlBegin(RL_QUADS); - rlColor4ub(color.r, color.g, color.b, color.a); - rlNormal3f(0.0f, 0.0f, 1.0f); + rlVertex2i(position.x, position.y); + rlVertex2i(position.x, position.y + size.y); + rlVertex2i(position.x + size.x, position.y + size.y); - rlTexCoord2f(0.0f, 0.0f); - rlVertex2f(position.x, position.y); - - rlTexCoord2f(0.0f, 1.0f); - rlVertex2f(position.x, position.y + size.y); - - rlTexCoord2f(1.0f, 1.0f); - rlVertex2f(position.x + size.x, position.y + size.y); - - rlTexCoord2f(1.0f, 0.0f); - rlVertex2f(position.x + size.x, position.y); - rlEnd(); - - rlDisableTexture(); -#endif - } + rlVertex2i(position.x, position.y); + rlVertex2i(position.x + size.x, position.y + size.y); + rlVertex2i(position.x + size.x, position.y); + rlEnd(); +#endif // SUPPORT_QUADS_DRAW_MODE } // Draw a color-filled rectangle @@ -364,7 +360,7 @@ void DrawRectangleGradientH(int posX, int posY, int width, int height, Color col // NOTE: Colors refer to corners, starting at top-lef corner and counter-clockwise void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4) { -#if defined(USE_DEFAULT_FONT_TEXTURE) +#if defined(SUPPORT_FONT_TEXTURE) // Draw rectangle using font texture white character rlEnableTexture(GetDefaultFont().texture.id); @@ -425,30 +421,27 @@ void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, // NOTE: On OpenGL 3.3 and ES2 we use QUADS to avoid drawing order issues (view rlglDraw) void DrawRectangleLines(int posX, int posY, int width, int height, Color color) { - if (rlGetVersion() == OPENGL_11) - { - rlBegin(RL_LINES); - rlColor4ub(color.r, color.g, color.b, color.a); - rlVertex2i(posX + 1, posY + 1); - rlVertex2i(posX + width, posY + 1); +#if defined(SUPPORT_QUADS_DRAW_MODE) + DrawRectangle(posX, posY, width, 1, color); + DrawRectangle(posX + width - 1, posY + 1, 1, height - 2, color); + DrawRectangle(posX, posY + height - 1, width, 1, color); + DrawRectangle(posX, posY + 1, 1, height - 2, color); +#else + rlBegin(RL_LINES); + rlColor4ub(color.r, color.g, color.b, color.a); + rlVertex2i(posX + 1, posY + 1); + rlVertex2i(posX + width, posY + 1); - rlVertex2i(posX + width, posY + 1); - rlVertex2i(posX + width, posY + height); + rlVertex2i(posX + width, posY + 1); + rlVertex2i(posX + width, posY + height); - rlVertex2i(posX + width, posY + height); - rlVertex2i(posX + 1, posY + height); + rlVertex2i(posX + width, posY + height); + rlVertex2i(posX + 1, posY + height); - rlVertex2i(posX + 1, posY + height); - rlVertex2i(posX + 1, posY + 1); - rlEnd(); - } - else if ((rlGetVersion() == OPENGL_21) || (rlGetVersion() == OPENGL_33) || (rlGetVersion() == OPENGL_ES_20)) - { - DrawRectangle(posX, posY, width, 1, color); - DrawRectangle(posX + width - 1, posY + 1, 1, height - 2, color); - DrawRectangle(posX, posY + height - 1, width, 1, color); - DrawRectangle(posX, posY + 1, 1, height - 2, color); - } + rlVertex2i(posX + 1, posY + height); + rlVertex2i(posX + 1, posY + 1); + rlEnd(); +#endif } // Draw rectangle outline with extended parameters @@ -469,31 +462,29 @@ void DrawRectangleLinesEx(Rectangle rec, int lineThick, Color color) // Draw a triangle void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color) { - if (rlGetVersion() == OPENGL_11) - { - rlBegin(RL_TRIANGLES); - rlColor4ub(color.r, color.g, color.b, color.a); - rlVertex2f(v1.x, v1.y); - rlVertex2f(v2.x, v2.y); - rlVertex2f(v3.x, v3.y); - rlEnd(); - } - else if ((rlGetVersion() == OPENGL_21) || (rlGetVersion() == OPENGL_33) || (rlGetVersion() == OPENGL_ES_20)) - { - rlEnableTexture(GetTextureDefault().id); // Default white texture +#if defined(SUPPORT_QUADS_DRAW_MODE) + rlEnableTexture(GetTextureDefault().id); // Default white texture - rlBegin(RL_QUADS); - rlColor4ub(color.r, color.g, color.b, color.a); - rlVertex2f(v1.x, v1.y); - rlVertex2f(v2.x, v2.y); - rlVertex2f(v2.x, v2.y); - rlVertex2f(v3.x, v3.y); - rlEnd(); - - rlDisableTexture(); - } + rlBegin(RL_QUADS); + rlColor4ub(color.r, color.g, color.b, color.a); + rlVertex2f(v1.x, v1.y); + rlVertex2f(v2.x, v2.y); + rlVertex2f(v2.x, v2.y); + rlVertex2f(v3.x, v3.y); + rlEnd(); + + rlDisableTexture(); +#else + rlBegin(RL_TRIANGLES); + rlColor4ub(color.r, color.g, color.b, color.a); + rlVertex2f(v1.x, v1.y); + rlVertex2f(v2.x, v2.y); + rlVertex2f(v3.x, v3.y); + rlEnd(); +#endif } +// Draw a triangle using lines void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color) { rlBegin(RL_LINES); @@ -517,7 +508,23 @@ void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color col rlPushMatrix(); rlTranslatef(center.x, center.y, 0.0); rlRotatef(rotation, 0, 0, 1); + + #if defined(SUPPORT_QUADS_DRAW_MODE) + rlEnableTexture(GetTextureDefault().id); // Default white texture + rlBegin(RL_QUADS); + for (int i = 0; i < 360; i += 360/sides) + { + rlColor4ub(color.r, color.g, color.b, color.a); + + rlVertex2f(0, 0); + rlVertex2f(sinf(DEG2RAD*i)*radius, cosf(DEG2RAD*i)*radius); + rlVertex2f(sinf(DEG2RAD*i)*radius, cosf(DEG2RAD*i)*radius); + rlVertex2f(sinf(DEG2RAD*(i + 360/sides))*radius, cosf(DEG2RAD*(i + 360/sides))*radius); + } + rlEnd(); + rlDisableTexture(); + #else rlBegin(RL_TRIANGLES); for (int i = 0; i < 360; i += 360/sides) { @@ -528,38 +535,54 @@ void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color col rlVertex2f(sinf(DEG2RAD*(i + 360/sides))*radius, cosf(DEG2RAD*(i + 360/sides))*radius); } rlEnd(); + #endif rlPopMatrix(); } // Draw a closed polygon defined by points -// NOTE: Array num elements MUST be passed as parameter to function -void DrawPolyEx(Vector2 *points, int numPoints, Color color) +void DrawPolyEx(Vector2 *points, int pointsCount, Color color) { - if (numPoints >= 3) + if (pointsCount >= 3) { + #if defined(SUPPORT_QUADS_DRAW_MODE) + rlEnableTexture(GetTextureDefault().id); // Default white texture + + rlBegin(RL_QUADS); + rlColor4ub(color.r, color.g, color.b, color.a); + + for (int i = 1; i < pointsCount - 1; i++) + { + rlVertex2f(points[0].x, points[0].y); + rlVertex2f(points[i].x, points[i].y); + rlVertex2f(points[i].x, points[i].y); + rlVertex2f(points[i + 1].x, points[i + 1].y); + } + rlEnd(); + rlDisableTexture(); + #else rlBegin(RL_TRIANGLES); rlColor4ub(color.r, color.g, color.b, color.a); - for (int i = 1; i < numPoints - 1; i++) + for (int i = 1; i < pointsCount - 1; i++) { rlVertex2f(points[0].x, points[0].y); rlVertex2f(points[i].x, points[i].y); rlVertex2f(points[i + 1].x, points[i + 1].y); } rlEnd(); + #endif } } -// Draw polygon lines -// NOTE: Array num elements MUST be passed as parameter to function -void DrawPolyExLines(Vector2 *points, int numPoints, Color color) +// Draw polygon using lines +void DrawPolyExLines(Vector2 *points, int pointsCount, Color color) { - if (numPoints >= 2) + if (pointsCount >= 2) { rlBegin(RL_LINES); rlColor4ub(color.r, color.g, color.b, color.a); - for (int i = 0; i < numPoints - 1; i++) + for (int i = 0; i < pointsCount - 1; i++) { rlVertex2f(points[i].x, points[i].y); rlVertex2f(points[i + 1].x, points[i + 1].y);