opengl added to engine
This commit is contained in:
parent
d8378484a7
commit
706a519452
31 changed files with 490 additions and 68 deletions
14
src/graphics/opengl/config.c
Normal file
14
src/graphics/opengl/config.c
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#ifdef ARC_OPENGL
|
||||
|
||||
#include <stdio.h>
|
||||
#include "arc/std/config.h"
|
||||
#include "arc/std/string.h"
|
||||
#include "arc/std/errno.h"
|
||||
|
||||
#include "arc/graphics/opengl/renderer.h"
|
||||
|
||||
|
||||
void ARC_GraphicsConfig_Init(ARC_Config *config, ARC_Renderer *renderer){
|
||||
}
|
||||
|
||||
#endif // ARC_OPENGL
|
||||
8
src/graphics/opengl/line.c
Normal file
8
src/graphics/opengl/line.c
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#ifdef ARC_OPENGL
|
||||
#include "arc/graphics/line.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void ARC_Line_Render(int32_t *x1, int32_t *y1, int32_t *x2, int32_t *y2, ARC_Renderer *renderer, ARC_Color *color){
|
||||
}
|
||||
|
||||
#endif // ARC_OPENGL
|
||||
11
src/graphics/opengl/rectangle.c
Normal file
11
src/graphics/opengl/rectangle.c
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#ifdef ARC_OPENGL
|
||||
#include "arc/graphics/rectangle.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void ARC_Rect_Render(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){
|
||||
}
|
||||
|
||||
void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){
|
||||
}
|
||||
|
||||
#endif // ARC_OPENGL
|
||||
55
src/graphics/opengl/renderer.c
Normal file
55
src/graphics/opengl/renderer.c
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
#ifdef ARC_OPENGL
|
||||
#include "arc/graphics/renderer.h"
|
||||
#include "arc/graphics/opengl/renderer.h"
|
||||
|
||||
#ifdef ARC_GLEW
|
||||
#define GLEW_STATIC
|
||||
#include <GL/glew.h>
|
||||
#endif // ARC_GLEW
|
||||
|
||||
#ifdef ARC_GLFW
|
||||
#include <GLFW/glfw3.h>
|
||||
#endif
|
||||
|
||||
#include "arc/graphics/window.h"
|
||||
#include "arc/std/errno.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *info){
|
||||
if(!info){
|
||||
arc_errno = ARC_ERRNO_NULL;
|
||||
ARC_DEBUG_ERR("ARC_Renderer_Create(**renderer, NULL)");
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef ARC_GLFW
|
||||
*renderer = (ARC_Renderer *)malloc(sizeof(ARC_Renderer));
|
||||
(*renderer)->window = info->window;
|
||||
|
||||
|
||||
glewExperimental = GL_TRUE;
|
||||
if(glewInit() != GLEW_OK){
|
||||
ARC_DEBUG_ERR("ARC_Renderer_Create(**renderer, info), GLEW failed to init");
|
||||
glfwTerminate();
|
||||
arc_errno = ARC_ERRNO_INIT;
|
||||
}
|
||||
#endif // ARC_GLEW
|
||||
|
||||
glClearColor(0.23f, 0.38f, 0.47f, 1.0f);
|
||||
}
|
||||
|
||||
void ARC_Renderer_Destroy(ARC_Renderer *renderer){
|
||||
free(renderer);
|
||||
}
|
||||
|
||||
void ARC_Renderer_Clear(ARC_Renderer *renderer){
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
}
|
||||
|
||||
void ARC_Renderer_Render(ARC_Renderer *renderer){
|
||||
#ifdef ARC_GLFW
|
||||
glfwSwapBuffers(renderer->window);
|
||||
#endif // ARC_GLEW
|
||||
}
|
||||
|
||||
#endif //ARC_SDL
|
||||
29
src/graphics/opengl/sprite.c
Normal file
29
src/graphics/opengl/sprite.c
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#ifdef ARC_OPENGL
|
||||
#include "arc/graphics/sprite.h"
|
||||
#include "arc/math/point.h"
|
||||
#include "arc/math/rectangle.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Array *frames){
|
||||
}
|
||||
|
||||
void ARC_Sprite_Destroy(ARC_Sprite *sprite){
|
||||
}
|
||||
|
||||
void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite){
|
||||
}
|
||||
|
||||
void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds){
|
||||
}
|
||||
|
||||
void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds, ARC_Point *center, double angle){
|
||||
}
|
||||
|
||||
void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){
|
||||
}
|
||||
|
||||
ARC_Rect *ARC_Sprite_GetBounds(ARC_Sprite *sprite){
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif // ARC_OPENGL
|
||||
17
src/graphics/opengl/spritesheet.c
Normal file
17
src/graphics/opengl/spritesheet.c
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#ifdef ARC_OPENGL
|
||||
#include "arc/graphics/spritesheet.h"
|
||||
#include "arc/math/point.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect *sheetBounds, ARC_Renderer *renderer, ARC_Rect *renderBounds){
|
||||
}
|
||||
|
||||
ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){
|
||||
return (ARC_Point){0, 0};
|
||||
}
|
||||
|
||||
uint32_t *ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet){
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif // ARC_OPENGL
|
||||
36
src/graphics/opengl/window.c
Normal file
36
src/graphics/opengl/window.c
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#ifdef ARC_GLFW
|
||||
#include "arc/graphics/window.h"
|
||||
#include "arc/graphics/opengl/window.h"
|
||||
|
||||
#include "arc/std/errno.h"
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void framebufferSizeCallback(GLFWwindow *window, int width, int height){
|
||||
glViewport(0, 0, width, height);
|
||||
}
|
||||
|
||||
void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){
|
||||
glfwInit();
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||
glfwWindowHint(GLFW_FLOATING, GLFW_TRUE);
|
||||
|
||||
*window = (ARC_Window *) glfwCreateWindow(info->w, info->h, "learnopengl window", NULL, NULL);
|
||||
if(*window == NULL){
|
||||
printf("Failed to create GLFW window\n");
|
||||
glfwTerminate();
|
||||
arc_errno = ARC_ERRNO_NULL;
|
||||
}
|
||||
|
||||
glfwMakeContextCurrent((GLFWwindow *)*window);
|
||||
glViewport(0, 0, info->w, info->h);
|
||||
glfwSetFramebufferSizeCallback((GLFWwindow *)*window, framebufferSizeCallback);
|
||||
}
|
||||
|
||||
void ARC_Window_Destroy(ARC_Window *window){
|
||||
glfwTerminate();
|
||||
}
|
||||
|
||||
#endif //ARC_GLFW
|
||||
|
|
@ -34,7 +34,7 @@ void ARC_Spritesheet_Delete(ARC_Config *config, ARC_String *string, void *value)
|
|||
void ARC_Sprite_Delete (ARC_Config *config, ARC_String *string, void *value);
|
||||
|
||||
void ARC_GraphicsConfig_Init(ARC_Config *config, ARC_Renderer *renderer){
|
||||
global_renderer = renderer->renderer;
|
||||
global_renderer = (SDL_Renderer *)renderer;
|
||||
ARC_Config_AddKeyCString(config, (char *)"ARC_Point" , 9, ARC_Point_Read , ARC_Point_Delete );
|
||||
ARC_Config_AddKeyCString(config, (char *)"ARC_Rect" , 8, ARC_Rect_Read , ARC_Rect_Delete );
|
||||
ARC_Config_AddKeyCString(config, (char *)"ARC_Rect[]" , 10, ARC_RectArray_Read , ARC_RectArray_Delete );
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
#include "arc/graphics/line.h"
|
||||
#ifdef ARC_SDL
|
||||
#include "arc/graphics/line.h"
|
||||
#include "arc/graphics/sdl/renderer.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void ARC_Line_Render(int32_t *x1, int32_t *y1, int32_t *x2, int32_t *y2, ARC_Renderer *renderer, ARC_Color *color){
|
||||
SDL_SetRenderDrawColor(renderer->renderer, color->r, color->g, color->b, color->a);
|
||||
SDL_RenderDrawLine(renderer->renderer, *x1, *y1, *x2, *y2);
|
||||
SDL_SetRenderDrawColor((SDL_Renderer *)renderer, color->r, color->g, color->b, color->a);
|
||||
SDL_RenderDrawLine((SDL_Renderer *)renderer, *x1, *y1, *x2, *y2);
|
||||
}
|
||||
|
||||
#endif // ARC_SDL
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
#include "arc/graphics/rectangle.h"
|
||||
#ifdef ARC_SDL
|
||||
#include "arc/graphics/rectangle.h"
|
||||
#include "arc/graphics/sdl/renderer.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void ARC_Rect_Render(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){
|
||||
SDL_SetRenderDrawColor(renderer->renderer, color->r, color->g, color->b, color->a);
|
||||
SDL_RenderDrawRect(renderer->renderer, (SDL_Rect *) rect);
|
||||
SDL_SetRenderDrawColor((SDL_Renderer *)renderer, color->r, color->g, color->b, color->a);
|
||||
SDL_RenderDrawRect((SDL_Renderer *)renderer, (SDL_Rect *) rect);
|
||||
}
|
||||
|
||||
void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color){
|
||||
SDL_SetRenderDrawColor(renderer->renderer, color->r, color->g, color->b, color->a);
|
||||
SDL_RenderFillRect(renderer->renderer, (SDL_Rect *) rect);
|
||||
SDL_SetRenderDrawColor((SDL_Renderer *)renderer, color->r, color->g, color->b, color->a);
|
||||
SDL_RenderFillRect((SDL_Renderer *)renderer, (SDL_Rect *) rect);
|
||||
}
|
||||
|
||||
#endif // ARC_SDL
|
||||
|
|
@ -14,10 +14,9 @@ void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *info){
|
|||
return;
|
||||
}
|
||||
|
||||
*renderer = (ARC_Renderer *)malloc(sizeof(ARC_Renderer));
|
||||
(*renderer)->renderer = SDL_CreateRenderer((SDL_Window *)info->window, info->index, info->flags);
|
||||
*renderer = (ARC_Renderer *)SDL_CreateRenderer((SDL_Window *)info->window, info->index, info->flags);
|
||||
|
||||
if(!(*renderer)->renderer){
|
||||
if(!*renderer){
|
||||
arc_errno = ARC_ERRNO_NULL;
|
||||
ARC_DEBUG_LOG(arc_errno, "SDL_CreateRenderer(%p, %d, %u);", info->window, info->index, info->flags);
|
||||
free(renderer);
|
||||
|
|
@ -25,17 +24,16 @@ void ARC_Renderer_Create(ARC_Renderer **renderer, ARC_RenderInfo *info){
|
|||
}
|
||||
|
||||
void ARC_Renderer_Destroy(ARC_Renderer *renderer){
|
||||
SDL_DestroyRenderer((SDL_Renderer *) renderer->renderer);
|
||||
free(renderer);
|
||||
SDL_DestroyRenderer((SDL_Renderer *) renderer);
|
||||
}
|
||||
|
||||
void ARC_Renderer_Clear(ARC_Renderer *renderer){
|
||||
SDL_SetRenderDrawColor((SDL_Renderer *)renderer->renderer, 0x1c, 0x2c, 0x3c, 0x00);
|
||||
SDL_RenderClear((SDL_Renderer *)renderer->renderer);
|
||||
SDL_SetRenderDrawColor((SDL_Renderer *)renderer, 0x1c, 0x2c, 0x3c, 0x00);
|
||||
SDL_RenderClear((SDL_Renderer *)renderer);
|
||||
}
|
||||
|
||||
void ARC_Renderer_Render(ARC_Renderer *renderer){
|
||||
SDL_RenderPresent((SDL_Renderer *)renderer->renderer);
|
||||
SDL_RenderPresent((SDL_Renderer *)renderer);
|
||||
}
|
||||
|
||||
#endif //ARC_SDL
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#include "arc/graphics/sprite.h"
|
||||
#ifdef ARC_SDL
|
||||
#include "arc/graphics/sprite.h"
|
||||
#include "arc/graphics/sdl/sprite.h"
|
||||
#include "arc/graphics/sdl/spritesheet.h"
|
||||
#include "arc/graphics/sdl/renderer.h"
|
||||
|
|
@ -28,11 +28,11 @@ void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite){
|
|||
}
|
||||
|
||||
void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds){
|
||||
SDL_RenderCopy(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds);
|
||||
SDL_RenderCopy((SDL_Renderer *)renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds);
|
||||
}
|
||||
|
||||
void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds, ARC_Point *center, double angle){
|
||||
SDL_RenderCopyEx(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds, angle, (SDL_Point *)center, SDL_FLIP_NONE);
|
||||
SDL_RenderCopyEx((SDL_Renderer *)renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds, angle, (SDL_Point *)center, SDL_FLIP_NONE);
|
||||
}
|
||||
|
||||
void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef ARC_SDL
|
||||
#include "arc/graphics/spritesheet.h"
|
||||
#include "arc/graphics/sdl/spritesheet.h"
|
||||
#include "arc/graphics/sdl/renderer.h"
|
||||
|
|
@ -5,7 +6,7 @@
|
|||
#include <SDL_render.h>
|
||||
|
||||
void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect *sheetBounds, ARC_Renderer *renderer, ARC_Rect *renderBounds){
|
||||
SDL_RenderCopy(renderer->renderer, spritesheet->texture, (SDL_Rect *)sheetBounds, (SDL_Rect *)renderBounds);
|
||||
SDL_RenderCopy((SDL_Renderer *)renderer, spritesheet->texture, (SDL_Rect *)sheetBounds, (SDL_Rect *)renderBounds);
|
||||
}
|
||||
|
||||
ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){
|
||||
|
|
@ -16,4 +17,5 @@ ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){
|
|||
|
||||
uint32_t *ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet){
|
||||
return spritesheet->size;
|
||||
}
|
||||
}
|
||||
#endif //ARC_SDL
|
||||
|
|
@ -18,10 +18,9 @@ void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){
|
|||
return;
|
||||
}
|
||||
|
||||
*window = (ARC_Window *)malloc(sizeof(ARC_Window));
|
||||
(*window)->window = SDL_CreateWindow((const char *)info->title, info->x, info->y, info->w, info->h, info->flags);
|
||||
*window = (ARC_Window *)SDL_CreateWindow((const char *)info->title, info->x, info->y, info->w, info->h, info->flags);
|
||||
|
||||
if(!(*window)->window){
|
||||
if(!*window){
|
||||
arc_errno = ARC_ERRNO_NULL;
|
||||
ARC_DEBUG_LOG(arc_errno, "SDL_CreateWindow(%s, %d, %d, %d, %d, %x);", info->title, info->x, info->y, info->w, info->h, info->flags);
|
||||
free(window);
|
||||
|
|
@ -29,8 +28,7 @@ void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){
|
|||
}
|
||||
|
||||
void ARC_Window_Destroy(ARC_Window *window){
|
||||
SDL_DestroyWindow((SDL_Window *) window->window);
|
||||
free(window);
|
||||
SDL_DestroyWindow((SDL_Window *) window);
|
||||
}
|
||||
|
||||
#endif //ARC_SDL
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue