Catgl is a cross-platform 3D graphics engine intended to be easy-to-use and high performance, which also supports the features for game development, such as animation, input device handling and sound playing. This application is designed for Android, iOS, Linux, Windows.
- OpenGL / OpenGLES
- GLSL (OpenGL Shading Language)
- NanoVG (https://github.com/memononen/nanovg)
- stb single-file public domain libraries (https://github.com/nothings/stb)
- GLFW (for Linux)
- Android NDK (for Android)
- for Linux
- dnf install glfw-devel
- for Android
- Download android-sdk-linux and install it.
- tools/android update sdk
- Android SDK Tools
- Android SDK Platform-tools
- Android SDK Build-tools
- API 10 SDK Platform
- Android Support Library
- tools/android update sdk
- Download android-ndk
- dnf install ant
- Download android-sdk-linux and install it.
- Linux
$ cd sample/box
$ make
- Android
$ cd sample/box
$ make android
- Skeleton
#define CATGL_IMPLEMENTATION
#include "catgl.h"
void caInit(int width, int height)
{
}
void caRender()
{
}
void caEnd()
{
}
$ clang -std=c11 -Os -MMD -MP -Wall -Wextra -Winit-self -Wno-unused-parameter -Wno-float-equal -Wno-missing-braces -I../../ -I../../nanovg -o obj/main.o -c main.c
$ clang++ -o hello obj/main.o /lib/libglfw.so /lib/libGL.so /lib/libm.so
- Eyes
#define CATGL_NANOVG
#define CATGL_IMPLEMENTATION
#include "catgl.h"
struct NVGcontext* vg;
int width, height;
float pixelRatio;
int c_action, c_x, c_y;
void mouseEvent(int button, int action, int x, int y)
{
c_action = action;
c_x = x;
c_y = y;
}
void caInit(int w, int h)
{
width = w;
height = h;
pixelRatio = (float)width / (float)height;
caMouseEvent = mouseEvent;
nvgCreateEx(vg, NVG_ANTIALIAS);
}
void caRender()
{
glViewport(0, 0, width, height);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
nvgBeginFrame(vg, width, height, pixelRatio);
static int c;
caDrawEyes(vg, 320, 180, 640, 360, c_x, c_y, c/10);
c++;
nvgEndFrame(vg);
}
void caEnd()
{
nvgDelete(vg);
}