finished embeddable/none platforms and the example
This commit is contained in:
parent
b0d4c5b0bc
commit
c13252e512
|
|
@ -2,7 +2,7 @@
|
|||
include(CMakeDependentOption)
|
||||
include(EnumOption)
|
||||
|
||||
enum_option(PLATFORM "Desktop;Web;Android;Raspberry Pi;DRM;SDL;Offscreen;None" "Platform to build for.")
|
||||
enum_option(PLATFORM "Desktop;Web;Android;Raspberry Pi;DRM;SDL;Embeddable;None" "Platform to build for.")
|
||||
|
||||
enum_option(OPENGL_VERSION "OFF;4.3;3.3;2.1;1.1;ES 2.0;ES 3.0" "Force a specific OpenGL Version?")
|
||||
|
||||
|
|
|
|||
|
|
@ -105,9 +105,9 @@ elseif ("${PLATFORM}" MATCHES "None")
|
|||
find_package(OpenGL)
|
||||
|
||||
set(LIBS_PRIVATE m atomic pthread ${OPENGL_LIBRARIES})
|
||||
elseif ("${PLATFORM}" MATCHES "Offscreen")
|
||||
elseif ("${PLATFORM}" MATCHES "Embeddable")
|
||||
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
|
||||
set(PLATFORM_CPP "PLATFORM_OFFSCREEN")
|
||||
set(PLATFORM_CPP "PLATFORM_EMBEDDABLE")
|
||||
|
||||
find_library(pthread NAMES pthread)
|
||||
find_package(OpenGL)
|
||||
|
|
|
|||
|
|
@ -118,15 +118,16 @@ elseif (NOT SUPPORT_GESTURES_SYSTEM)
|
|||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_basic_screen_manager.c)
|
||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_input_gestures_web.c)
|
||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_input_gestures.c)
|
||||
elseif ("${PLATFORM}" STREQUAL "None" OR "${PLATFORM}" STREQUAL "Offscreen")
|
||||
# for some reason i get an error when trying to compile this one from any platform? oh well we'll just stick it here
|
||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/raylib_opengl_interop.c)
|
||||
endif ()
|
||||
|
||||
# The core_override one is only for Embeddable/Blank platforms
|
||||
if (NOT ${PLATFORM} MATCHES "None" AND NOT ${PLATFORM} MATCHES "Embeddable")
|
||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_override.c)
|
||||
endif()
|
||||
|
||||
# The rlgl_standalone example only targets desktop, without shared libraries.
|
||||
if (BUILD_SHARED_LIBS OR NOT ${PLATFORM} MATCHES "Desktop")
|
||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c)
|
||||
|
||||
endif()
|
||||
|
||||
include_directories(BEFORE SYSTEM others/external/include)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@
|
|||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
#include "rmod.h"
|
||||
#include "rcore.h"
|
||||
|
||||
#include "GLFW/glfw3.h" // Windows/Context and inputs management
|
||||
|
|
@ -28,6 +27,15 @@ const int screenHeight = 450;
|
|||
GLFWwindow *window;
|
||||
|
||||
|
||||
void CustomSetWindowTitle(const char *title)
|
||||
{
|
||||
GetCore()->Window.title = title;
|
||||
glfwSetWindowTitle(window, title);
|
||||
}
|
||||
|
||||
double CustomGetTime(void) {
|
||||
return glfwGetTime();
|
||||
}
|
||||
|
||||
bool CustomWindowShouldClose(void) {
|
||||
if (GetCore()->Window.ready) return GetCore()->Window.shouldClose;
|
||||
|
|
@ -35,7 +43,6 @@ bool CustomWindowShouldClose(void) {
|
|||
}
|
||||
|
||||
int CustomInitPlatform(void) {
|
||||
printf("Initing\n");
|
||||
if (!glfwInit())
|
||||
{
|
||||
printf("GLFW3: Can not initialize GLFW\n");
|
||||
|
|
@ -65,6 +72,7 @@ int CustomInitPlatform(void) {
|
|||
else printf("GLFW3: Window created successfully\n");
|
||||
|
||||
//glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
|
||||
glfwSetWindowSize(window, GetCore()->Window.screen.width, GetCore()->Window.screen.height);
|
||||
glfwSetWindowPos(window, 200, 200);
|
||||
|
||||
glfwMakeContextCurrent(window);
|
||||
|
|
@ -94,40 +102,51 @@ void CustomClosePlatform(void) {
|
|||
glfwTerminate(); // Free GLFW3 resources
|
||||
}
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------
|
||||
// Program main entry point
|
||||
//------------------------------------------------------------------------------------
|
||||
int main(void)
|
||||
|
||||
{
|
||||
union OverridableFunctionPointer funcs;
|
||||
funcs.InitPlatform = CustomInitPlatform;
|
||||
funcs.ClosePlatform = CustomClosePlatform;
|
||||
funcs.WindowShouldClose = CustomWindowShouldClose;
|
||||
//CustomInitPlatform();
|
||||
|
||||
OverrideInternalFunction("InitPlatform",&funcs);
|
||||
OverrideInternalFunction("ClosePlatform",&funcs);
|
||||
OverrideInternalFunction("WindowShouldClose",&funcs);
|
||||
union OverridableFunctionPointer funcs[4];
|
||||
|
||||
RenderTexture2D fb = LoadRenderTexture(80,24);
|
||||
funcs[0].InitPlatform = CustomInitPlatform;
|
||||
OverrideInternalFunction("InitPlatform",&funcs[0]);
|
||||
|
||||
InitWindow(1,1,"r");
|
||||
funcs[1].ClosePlatform = CustomClosePlatform;
|
||||
OverrideInternalFunction("ClosePlatform",&funcs[1]);
|
||||
|
||||
Color col;
|
||||
funcs[2].WindowShouldClose = CustomWindowShouldClose;
|
||||
OverrideInternalFunction("WindowShouldClose",&funcs[2]);
|
||||
|
||||
funcs[3].GetTime = CustomGetTime;
|
||||
OverrideInternalFunction("GetTime",&funcs[3]);
|
||||
|
||||
funcs[4].SetWindowTitle = CustomSetWindowTitle;
|
||||
OverrideInternalFunction("SetWindowTitle",&funcs[4]);
|
||||
|
||||
|
||||
InitWindow(screenWidth,screenHeight,"Test");
|
||||
|
||||
Color col = WHITE;
|
||||
|
||||
SetTargetFPS(5);
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while(!WindowShouldClose()) {
|
||||
Vector2 pos = GetMousePosition();
|
||||
|
||||
BeginDrawing();
|
||||
ClearBackground(WHITE);
|
||||
BeginTextureMode(fb);
|
||||
ClearBackground(RED);
|
||||
EndTextureMode();
|
||||
ClearBackground(col);
|
||||
EndDrawing();
|
||||
|
||||
col.r = GetRandomValue(0,255);
|
||||
col.g = GetRandomValue(0,255);
|
||||
col.b = GetRandomValue(0,255);
|
||||
|
||||
glfwSwapBuffers(window);
|
||||
glfwPollEvents();
|
||||
GetCore()->Window.shouldClose = glfwWindowShouldClose(window);
|
||||
4
src/external/RGFW.h
vendored
4
src/external/RGFW.h
vendored
|
|
@ -8516,9 +8516,9 @@ RGFW_window* RGFW_createWindow(const char* name, RGFW_rect rect, u16 args) {
|
|||
attrs.preserveDrawingBuffer = EM_FALSE;
|
||||
|
||||
if (RGFW_DOUBLE_BUFFER == 0)
|
||||
attrs.renderViaOffscreenBackBuffer = 0;
|
||||
attrs.renderViaEmbeddableBackBuffer = 0;
|
||||
else
|
||||
attrs.renderViaOffscreenBackBuffer = RGFW_AUX_BUFFERS;
|
||||
attrs.renderViaEmbeddableBackBuffer = RGFW_AUX_BUFFERS;
|
||||
|
||||
attrs.failIfMajorPerformanceCaveat = EM_FALSE;
|
||||
attrs.majorVersion = (RGFW_majorVersion == 0) ? 1 : RGFW_majorVersion;
|
||||
|
|
|
|||
|
|
@ -36,20 +36,72 @@ static PlatformData platform = { 0 }; // Platform specific data
|
|||
return; \
|
||||
}
|
||||
|
||||
// For the functions that have default behavior on PLATFORM_OFFSCREEN, check if the function exists
|
||||
// For the functions that have default behavior on PLATFORM_EMBEDDABLE, check if the function exists
|
||||
// first.
|
||||
#define CHECK_AND_CALL(fn_name, args) \
|
||||
if(internal##fn_name##Callback != NULL) {\
|
||||
return (*internal##fn_name##Callback)(LIST args); \
|
||||
}
|
||||
|
||||
// For the functions that have default behavior on PLATFORM_OFFSCREEN, check if the function exists
|
||||
// For the functions that have default behavior on PLATFORM_EMBEDDABLE, check if the function exists
|
||||
// first (void version).
|
||||
#define CHECK_AND_CALL_VOID(fn_name, args) \
|
||||
if(internal##fn_name##Callback != NULL) {\
|
||||
(*internal##fn_name##Callback)(LIST args); \
|
||||
}
|
||||
|
||||
// Generate an internal callback function pointer
|
||||
#define GEN_FUNCPOINTER(fn_name) \
|
||||
static fn_name##Callback * internal##fn_name##Callback = NULL;
|
||||
|
||||
GEN_FUNCPOINTER(InitPlatform)
|
||||
GEN_FUNCPOINTER(WindowShouldClose)
|
||||
GEN_FUNCPOINTER(GetMonitorCount)
|
||||
GEN_FUNCPOINTER(GetCurrentMonitor)
|
||||
GEN_FUNCPOINTER(ShowCursor)
|
||||
GEN_FUNCPOINTER(HideCursor)
|
||||
GEN_FUNCPOINTER(SetWindowState)
|
||||
GEN_FUNCPOINTER(ClearWindowState)
|
||||
GEN_FUNCPOINTER(SetWindowMinSize)
|
||||
GEN_FUNCPOINTER(SetWindowMaxSize)
|
||||
GEN_FUNCPOINTER(SetWindowSize)
|
||||
GEN_FUNCPOINTER(ClosePlatform)
|
||||
GEN_FUNCPOINTER(ToggleFullscreen)
|
||||
GEN_FUNCPOINTER(ToggleBorderlessWindowed)
|
||||
GEN_FUNCPOINTER(MaximizeWindow)
|
||||
GEN_FUNCPOINTER(MinimizeWindow)
|
||||
GEN_FUNCPOINTER(RestoreWindow)
|
||||
GEN_FUNCPOINTER(SetWindowIcon)
|
||||
GEN_FUNCPOINTER(SetWindowIcons)
|
||||
GEN_FUNCPOINTER(SetWindowTitle)
|
||||
GEN_FUNCPOINTER(SetWindowPosition)
|
||||
GEN_FUNCPOINTER(SetWindowMonitor)
|
||||
GEN_FUNCPOINTER(SetWindowOpacity)
|
||||
GEN_FUNCPOINTER(SetWindowFocused)
|
||||
GEN_FUNCPOINTER(EnableCursor)
|
||||
GEN_FUNCPOINTER(DisableCursor)
|
||||
GEN_FUNCPOINTER(SwapScreenBuffer)
|
||||
GEN_FUNCPOINTER(SetGamepadVibration)
|
||||
GEN_FUNCPOINTER(SetMousePosition)
|
||||
GEN_FUNCPOINTER(SetMouseCursor)
|
||||
GEN_FUNCPOINTER(PollInputEvents)
|
||||
GEN_FUNCPOINTER(SetClipboardText)
|
||||
GEN_FUNCPOINTER(SetGamepadMappings)
|
||||
GEN_FUNCPOINTER(GetWindowHandle)
|
||||
GEN_FUNCPOINTER(GetMonitorPosition)
|
||||
GEN_FUNCPOINTER(GetMonitorWidth)
|
||||
GEN_FUNCPOINTER(GetMonitorHeight)
|
||||
GEN_FUNCPOINTER(GetMonitorPhysicalWidth)
|
||||
GEN_FUNCPOINTER(GetMonitorPhysicalHeight)
|
||||
GEN_FUNCPOINTER(GetMonitorRefreshRate)
|
||||
GEN_FUNCPOINTER(GetMonitorName)
|
||||
GEN_FUNCPOINTER(GetWindowPosition)
|
||||
GEN_FUNCPOINTER(GetWindowScaleDPI)
|
||||
GEN_FUNCPOINTER(GetClipboardText)
|
||||
GEN_FUNCPOINTER(GetKeyName)
|
||||
GEN_FUNCPOINTER(GetTime)
|
||||
GEN_FUNCPOINTER(OpenURL)
|
||||
|
||||
GEN_CALLBACK_BODY_VOID(ClosePlatform, (void), ())
|
||||
GEN_CALLBACK_BODY_VOID(ToggleFullscreen, (void), ())
|
||||
GEN_CALLBACK_BODY_VOID(ToggleBorderlessWindowed, (void), ())
|
||||
|
|
@ -87,7 +139,7 @@ GEN_CALLBACK_BODY(const char *, "", GetKeyName, (int key), (key))
|
|||
GEN_CALLBACK_BODY(double, 0.0, GetTime, (void), ())
|
||||
GEN_CALLBACK_BODY_VOID(OpenURL, (const char *url), (url))
|
||||
|
||||
// Override an internal platform function with your own (PLATFORM_OFFSCREEN and PLATFORM_NONE only).
|
||||
// Override an internal platform function with your own (PLATFORM_EMBEDDABLE and PLATFORM_NONE only).
|
||||
// Note that there is no responsibility here for the Raylib maintainers to keep a stable API for core functions
|
||||
void OverrideInternalFunction(const char * funcName, union OverridableFunctionPointer * func) {
|
||||
GEN_CASE(InitPlatform)
|
||||
|
|
@ -136,17 +188,29 @@ void OverrideInternalFunction(const char * funcName, union OverridableFunctionPo
|
|||
GEN_CASE(GetClipboardText)
|
||||
GEN_CASE(GetKeyName)
|
||||
GEN_CASE(GetTime)
|
||||
GEN_CASE(OpenURL)
|
||||
|
||||
TraceLog(LOG_ERROR, "Unknown function name \"%s\", did not bind.",funcName);
|
||||
};
|
||||
|
||||
|
||||
#ifdef PLATFORM_OFFSCREEN
|
||||
//
|
||||
#ifndef PLATFORM_EMBEDDABLE
|
||||
GEN_CALLBACK_BODY(int, 0, InitPlatform, (void), ())
|
||||
GEN_CALLBACK_BODY(bool, true, WindowShouldClose, (void), ())
|
||||
GEN_CALLBACK_BODY(int, 0, GetMonitorCount, (void), ())
|
||||
GEN_CALLBACK_BODY(int, 0, GetCurrentMonitor, (void), ())
|
||||
GEN_CALLBACK_BODY_VOID(ShowCursor, (void), ())
|
||||
GEN_CALLBACK_BODY_VOID(HideCursor, (void), ())
|
||||
GEN_CALLBACK_BODY_VOID(SetWindowState, (unsigned int flags), (flags))
|
||||
GEN_CALLBACK_BODY_VOID(ClearWindowState, (unsigned int flags), (flags))
|
||||
GEN_CALLBACK_BODY_VOID(SetWindowMinSize, (int width, int height), (width,height))
|
||||
GEN_CALLBACK_BODY_VOID(SetWindowMaxSize, (int width, int height), (width,height))
|
||||
GEN_CALLBACK_BODY_VOID(SetWindowSize, (int width, int height), (width,height))
|
||||
|
||||
#else
|
||||
int InitPlatform(void) {
|
||||
printf("j\n");
|
||||
CHECK_AND_CALL(InitPlatform, ());
|
||||
printf("test\n");
|
||||
printf("theJ\n");
|
||||
CORE.Window.ready = true;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ typedef struct {
|
|||
#define LIST(...) __VA_ARGS__
|
||||
|
||||
// The code for warning the user that a function hasn't been overriden. On PLATFORM_NONE, this isn't emitted.
|
||||
#ifndef PLATFORM_OFFSCREEN
|
||||
#ifndef PLATFORM_EMBEDDABLE
|
||||
#define FUNCTION_MISSING_WARNING(fn_name) TRACELOG(LOG_WARNING, #fn_name " was called but not overriden by the user");
|
||||
#else
|
||||
#define FUNCTION_MISSING_WARNING(fn_name)
|
||||
|
|
@ -72,13 +72,11 @@ typedef struct {
|
|||
// Generate a callback
|
||||
#define GEN_CALLBACK_HEAD(fn_ret, ret_value, fn_name, named_args, args) \
|
||||
typedef fn_ret (*fn_name##Callback)(LIST named_args); \
|
||||
static fn_name##Callback * internal##fn_name##Callback = NULL; \
|
||||
fn_ret fn_name(LIST named_args);
|
||||
|
||||
// Generate a callback that returns a void.
|
||||
#define GEN_CALLBACK_HEAD_VOID(fn_name, named_args, args) \
|
||||
typedef void (*fn_name##Callback)(LIST named_args); \
|
||||
static fn_name##Callback * internal##fn_name##Callback = NULL; \
|
||||
void fn_name(LIST named_args);
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
|
|
@ -141,7 +139,7 @@ GEN_CALLBACK_HEAD_VOID(SetWindowSize, (int width, int height), (width,height))
|
|||
#define GEN_FIELD(fn_name) fn_name##Callback fn_name;
|
||||
|
||||
// The avaliable functions you can pass to OverrideInternalFunction.
|
||||
// The fields are only accessible when compiling with PLATFORM_NONE or PLATFORM_OFFSCREEN
|
||||
// The fields are only accessible when compiling with PLATFORM_NONE or PLATFORM_EMBEDDABLE
|
||||
union OverridableFunctionPointer {
|
||||
GEN_FIELD(InitPlatform)
|
||||
GEN_FIELD(WindowShouldClose)
|
||||
|
|
@ -189,6 +187,7 @@ union OverridableFunctionPointer {
|
|||
GEN_FIELD(GetClipboardText)
|
||||
GEN_FIELD(GetKeyName)
|
||||
GEN_FIELD(GetTime)
|
||||
GEN_FIELD(OpenURL)
|
||||
};
|
||||
|
||||
void OverrideInternalFunction(const char * funcName, union OverridableFunctionPointer * func);
|
||||
|
|
|
|||
|
|
@ -361,7 +361,7 @@ const char *TextFormat(const char *text, ...); // Formatting of tex
|
|||
#include "platforms/rcore_android.c"
|
||||
#elif defined(PLATFORM_NONE)
|
||||
#include "platforms/rcore_none.c"
|
||||
#elif defined(PLATFORM_OFFSCREEN)
|
||||
#elif defined(PLATFORM_EMBEDDABLE)
|
||||
#include "platforms/rcore_none.c"
|
||||
#else
|
||||
// TODO: Include your custom platform backend!
|
||||
|
|
|
|||
|
|
@ -88,6 +88,13 @@
|
|||
#include <raylib.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef PLATFORM_NONE
|
||||
#include "platforms/rcore_none.h"
|
||||
#endif
|
||||
#ifdef PLATFORM_EMBEDDABLE
|
||||
#include "platforms/rcore_none.h"
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Defines and Macros
|
||||
//----------------------------------------------------------------------------------
|
||||
|
|
|
|||
11
src/rmod.h
11
src/rmod.h
|
|
@ -1,11 +0,0 @@
|
|||
#ifndef RMOD_H
|
||||
#define RMOD_H
|
||||
|
||||
#ifdef PLATFORM_NONE
|
||||
#include "platforms/rcore_none.h"
|
||||
#endif
|
||||
#ifdef PLATFORM_OFFSCREEN
|
||||
#include "platforms/rcore_none.h"
|
||||
#endif
|
||||
|
||||
#endif // RMOD_H
|
||||
Loading…
Reference in New Issue
Block a user