refactor app and enable gles 3.0
This commit is contained in:
@@ -33,10 +33,12 @@ add_library(
|
|||||||
../engine/shader.cpp
|
../engine/shader.cpp
|
||||||
../engine/shape.cpp
|
../engine/shape.cpp
|
||||||
../engine/layout.cpp
|
../engine/layout.cpp
|
||||||
|
../engine/app.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(native-lib PRIVATE
|
target_include_directories(native-lib PRIVATE
|
||||||
${ANDROID_NDK}/sources/android/native_app_glue
|
${ANDROID_NDK}/sources/android/native_app_glue
|
||||||
|
../engine
|
||||||
../libs/glm
|
../libs/glm
|
||||||
../libs/tinyxml2
|
../libs/tinyxml2
|
||||||
../libs/yoga
|
../libs/yoga
|
||||||
|
|||||||
@@ -22,15 +22,8 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
#include <EGL/egl.h>
|
#include "pch.h"
|
||||||
#include <GLES3/gl3.h>
|
#include "app.h"
|
||||||
|
|
||||||
#include <android/sensor.h>
|
|
||||||
#include <android/log.h>
|
|
||||||
#include <android_native_app_glue.h>
|
|
||||||
|
|
||||||
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))
|
|
||||||
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Our saved state data.
|
* Our saved state data.
|
||||||
@@ -60,6 +53,8 @@ struct engine {
|
|||||||
struct saved_state state;
|
struct saved_state state;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Plane plane;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize an EGL context for the current display.
|
* Initialize an EGL context for the current display.
|
||||||
*/
|
*/
|
||||||
@@ -120,10 +115,16 @@ static int engine_init_display(struct engine* engine) {
|
|||||||
* ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */
|
* ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */
|
||||||
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
|
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
|
||||||
surface = eglCreateWindowSurface(display, config, engine->app->window, NULL);
|
surface = eglCreateWindowSurface(display, config, engine->app->window, NULL);
|
||||||
context = eglCreateContext(display, config, NULL, NULL);
|
|
||||||
|
const EGLint attribs_test[] = {
|
||||||
|
EGL_CONTEXT_CLIENT_VERSION, 3,
|
||||||
|
EGL_NONE
|
||||||
|
};
|
||||||
|
|
||||||
|
context = eglCreateContext(display, config, EGL_NO_CONTEXT, attribs_test);
|
||||||
|
|
||||||
if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) {
|
if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) {
|
||||||
LOGW("Unable to eglMakeCurrent");
|
LOG("Unable to eglMakeCurrent");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,13 +142,23 @@ static int engine_init_display(struct engine* engine) {
|
|||||||
auto opengl_info = {GL_VENDOR, GL_RENDERER, GL_VERSION, GL_EXTENSIONS};
|
auto opengl_info = {GL_VENDOR, GL_RENDERER, GL_VERSION, GL_EXTENSIONS};
|
||||||
for (auto name : opengl_info) {
|
for (auto name : opengl_info) {
|
||||||
auto info = glGetString(name);
|
auto info = glGetString(name);
|
||||||
LOGI("OpenGL Info: %s", info);
|
LOG("OpenGL Info: %s", info);
|
||||||
}
|
}
|
||||||
// Initialize GL state.
|
// Initialize GL state.
|
||||||
//glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
|
//glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
|
||||||
glEnable(GL_CULL_FACE);
|
//glEnable(GL_CULL_FACE);
|
||||||
//glShadeModel(GL_SMOOTH);
|
//glShadeModel(GL_SMOOTH);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
//glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
|
|
||||||
|
App::I.width = w;
|
||||||
|
App::I.height = h;
|
||||||
|
App::I.initShaders();
|
||||||
|
|
||||||
|
if (!plane.create<1>(1,1))
|
||||||
|
LOG("Failed to create the plane mesh");
|
||||||
|
|
||||||
|
LOG("All ready");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -166,6 +177,13 @@ static void engine_draw_frame(struct engine* engine) {
|
|||||||
((float)engine->state.y)/engine->height, 1);
|
((float)engine->state.y)/engine->height, 1);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
glm::mat4 mvp = glm::ortho<float>(-1, 1, -1, 1, -1, 1);
|
||||||
|
//App::I.update(now - _prevTime);
|
||||||
|
ShaderManager::use(kShader::Color);
|
||||||
|
ShaderManager::u_mat4(kShaderUniform::MVP, mvp);
|
||||||
|
ShaderManager::u_vec4(kShaderUniform::Col, glm::vec4(1, 0, 0, 1));
|
||||||
|
plane.draw_fill();
|
||||||
|
|
||||||
eglSwapBuffers(engine->display, engine->surface);
|
eglSwapBuffers(engine->display, engine->surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,6 +301,8 @@ void android_main(struct android_app* state) {
|
|||||||
engine.state = *(struct saved_state*)state->savedState;
|
engine.state = *(struct saved_state*)state->savedState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//App::I.create();
|
||||||
|
|
||||||
// loop waiting for stuff to do.
|
// loop waiting for stuff to do.
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
@@ -308,9 +328,9 @@ void android_main(struct android_app* state) {
|
|||||||
ASensorEvent event;
|
ASensorEvent event;
|
||||||
while (ASensorEventQueue_getEvents(engine.sensorEventQueue,
|
while (ASensorEventQueue_getEvents(engine.sensorEventQueue,
|
||||||
&event, 1) > 0) {
|
&event, 1) > 0) {
|
||||||
LOGI("accelerometer: x=%f y=%f z=%f",
|
// LOGI("accelerometer: x=%f y=%f z=%f",
|
||||||
event.acceleration.x, event.acceleration.y,
|
// event.acceleration.x, event.acceleration.y,
|
||||||
event.acceleration.z);
|
// event.acceleration.z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
126
engine/app.cpp
126
engine/app.cpp
@@ -9,10 +9,10 @@ void App::create()
|
|||||||
height = 500;
|
height = 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
void App::init()
|
void App::initShaders()
|
||||||
{
|
{
|
||||||
static const char* shader_v =
|
static const char* shader_v =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform mat4 mvp;"
|
"uniform mat4 mvp;"
|
||||||
"in vec4 pos;"
|
"in vec4 pos;"
|
||||||
"in vec2 uvs;"
|
"in vec2 uvs;"
|
||||||
@@ -22,7 +22,7 @@ void App::init()
|
|||||||
" gl_Position = mvp * vec4(pos.xyz, 1.f);"
|
" gl_Position = mvp * vec4(pos.xyz, 1.f);"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_f =
|
static const char* shader_f =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform sampler2D tex;"
|
"uniform sampler2D tex;"
|
||||||
"in vec3 uv;"
|
"in vec3 uv;"
|
||||||
"out vec4 frag;"
|
"out vec4 frag;"
|
||||||
@@ -31,7 +31,7 @@ void App::init()
|
|||||||
" frag = texture(tex, uv.xy);"
|
" frag = texture(tex, uv.xy);"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_uv_f =
|
static const char* shader_uv_f =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform sampler2D tex;"
|
"uniform sampler2D tex;"
|
||||||
"in vec3 uv;"
|
"in vec3 uv;"
|
||||||
"out vec4 frag;"
|
"out vec4 frag;"
|
||||||
@@ -39,7 +39,7 @@ void App::init()
|
|||||||
" frag = vec4(uv.xy,0,1);"
|
" frag = vec4(uv.xy,0,1);"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_atlas_v =
|
static const char* shader_atlas_v =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform mat4 mvp;"
|
"uniform mat4 mvp;"
|
||||||
"uniform vec2 tof;"
|
"uniform vec2 tof;"
|
||||||
"uniform vec2 tsz;"
|
"uniform vec2 tsz;"
|
||||||
@@ -51,7 +51,7 @@ void App::init()
|
|||||||
" gl_Position = mvp * vec4(pos, 0, 1);"
|
" gl_Position = mvp * vec4(pos, 0, 1);"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_atlas_f =
|
static const char* shader_atlas_f =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform sampler2D tex;"
|
"uniform sampler2D tex;"
|
||||||
"in vec2 uv;"
|
"in vec2 uv;"
|
||||||
"out vec4 frag;"
|
"out vec4 frag;"
|
||||||
@@ -59,21 +59,21 @@ void App::init()
|
|||||||
" frag = texture(tex, uv);"
|
" frag = texture(tex, uv);"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_color_v =
|
static const char* shader_color_v =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform mat4 mvp;"
|
"uniform mat4 mvp;"
|
||||||
"in vec4 pos;"
|
"in vec4 pos;"
|
||||||
"void main(){"
|
"void main(){"
|
||||||
" gl_Position = mvp * pos;"
|
" gl_Position = mvp * pos;"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_color_f =
|
static const char* shader_color_f =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform vec4 col;"
|
"uniform vec4 col;"
|
||||||
"out vec4 frag;"
|
"out vec4 frag;"
|
||||||
"void main(){"
|
"void main(){"
|
||||||
" frag = col;"
|
" frag = col;"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_font_v =
|
static const char* shader_font_v =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform mat4 mvp;"
|
"uniform mat4 mvp;"
|
||||||
"in vec2 pos;"
|
"in vec2 pos;"
|
||||||
"in vec2 uvs;"
|
"in vec2 uvs;"
|
||||||
@@ -83,7 +83,7 @@ void App::init()
|
|||||||
" gl_Position = mvp * vec4(pos, 0, 1);"
|
" gl_Position = mvp * vec4(pos, 0, 1);"
|
||||||
"}";
|
"}";
|
||||||
static const char* shader_font_f =
|
static const char* shader_font_f =
|
||||||
"#version 150\n"
|
"#version 300 es\n"
|
||||||
"uniform sampler2D tex;"
|
"uniform sampler2D tex;"
|
||||||
"uniform vec4 col;"
|
"uniform vec4 col;"
|
||||||
"in vec2 uv;"
|
"in vec2 uv;"
|
||||||
@@ -93,27 +93,20 @@ void App::init()
|
|||||||
" frag = vec4(col.rgb, a);"
|
" frag = vec4(col.rgb, a);"
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
#ifdef _WIN32
|
if (!ShaderManager::create(kShader::Texture, shader_v, shader_f))
|
||||||
static CONSOLE_SCREEN_BUFFER_INFO info;
|
LOG("Failed to create shader Texture");
|
||||||
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);
|
if (!ShaderManager::create(kShader::Color, shader_color_v, shader_color_f))
|
||||||
// colors: http://stackoverflow.com/questions/4053837/colorizing-text-in-the-console-with-c
|
LOG("Failed to create shader Color");
|
||||||
glDebugMessageCallback([](GLenum source, GLenum type, GLuint id,
|
if (!ShaderManager::create(kShader::UVs, shader_v, shader_uv_f))
|
||||||
GLenum severity, GLsizei length, const GLchar* message, const void* userParam)
|
LOG("Failed to create shader UVs");
|
||||||
{
|
if (!ShaderManager::create(kShader::Font, shader_font_v, shader_font_f))
|
||||||
static std::map<GLenum, int> colors = {
|
LOG("Failed to create shader Font");
|
||||||
{ GL_DEBUG_SEVERITY_NOTIFICATION, 8 },
|
if (!ShaderManager::create(kShader::Atlas, shader_atlas_v, shader_atlas_f))
|
||||||
{ GL_DEBUG_SEVERITY_LOW, 8 },
|
LOG("Failed to create shader Atlas");
|
||||||
{ GL_DEBUG_SEVERITY_MEDIUM, FOREGROUND_GREEN | FOREGROUND_INTENSITY },
|
}
|
||||||
{ GL_DEBUG_SEVERITY_HIGH, FOREGROUND_RED | FOREGROUND_INTENSITY },
|
|
||||||
};
|
|
||||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors[severity]);
|
|
||||||
printf("%.*s\n", length, message);
|
|
||||||
FlushConsoleInputBuffer(GetStdHandle(STD_OUTPUT_HANDLE));
|
|
||||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), info.wAttributes);
|
|
||||||
}, nullptr);
|
|
||||||
glEnable(GL_DEBUG_OUTPUT);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
void App::initAssets()
|
||||||
|
{
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
const char* ttf = "C:\\Windows\\Fonts\\arial.ttf";
|
const char* ttf = "C:\\Windows\\Fonts\\arial.ttf";
|
||||||
#else
|
#else
|
||||||
@@ -122,6 +115,14 @@ void App::init()
|
|||||||
FontManager::init();
|
FontManager::init();
|
||||||
FontManager::load(kFont::Arial_11, ttf, 15);
|
FontManager::load(kFont::Arial_11, ttf, 15);
|
||||||
FontManager::load(kFont::Arial_30, ttf, 30);
|
FontManager::load(kFont::Arial_30, ttf, 30);
|
||||||
|
|
||||||
|
sampler.create(GL_NEAREST);
|
||||||
|
if (!tex.load("data/uvs.jpg"))
|
||||||
|
LOG("error loading image\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void App::initLayout()
|
||||||
|
{
|
||||||
NodeBorder::static_init();
|
NodeBorder::static_init();
|
||||||
NodeImage::static_init();
|
NodeImage::static_init();
|
||||||
NodeIcon::static_init();
|
NodeIcon::static_init();
|
||||||
@@ -191,24 +192,38 @@ void App::init()
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
layout.load("data/layout2.xml");
|
layout.load("data/layout2.xml");
|
||||||
|
}
|
||||||
|
|
||||||
//msgbox->find<NodeButton>("btn-ok")->on_click = [] { exit(0); };
|
void App::init()
|
||||||
// msgbox->find<NodeButton>("btn-ok")->m_text->m_text = "DO";
|
{
|
||||||
// msgbox->find<NodeButton>("btn-ok")->m_text->create();
|
#ifdef _WIN32
|
||||||
|
static CONSOLE_SCREEN_BUFFER_INFO info;
|
||||||
|
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);
|
||||||
|
// colors: http://stackoverflow.com/questions/4053837/colorizing-text-in-the-console-with-c
|
||||||
|
glDebugMessageCallback([](GLenum source, GLenum type, GLuint id,
|
||||||
|
GLenum severity, GLsizei length, const GLchar* message, const void* userParam)
|
||||||
|
{
|
||||||
|
static std::map<GLenum, int> colors = {
|
||||||
|
{ GL_DEBUG_SEVERITY_NOTIFICATION, 8 },
|
||||||
|
{ GL_DEBUG_SEVERITY_LOW, 8 },
|
||||||
|
{ GL_DEBUG_SEVERITY_MEDIUM, FOREGROUND_GREEN | FOREGROUND_INTENSITY },
|
||||||
|
{ GL_DEBUG_SEVERITY_HIGH, FOREGROUND_RED | FOREGROUND_INTENSITY },
|
||||||
|
};
|
||||||
|
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors[severity]);
|
||||||
|
LOG("%.*s\n", length, message);
|
||||||
|
FlushConsoleInputBuffer(GetStdHandle(STD_OUTPUT_HANDLE));
|
||||||
|
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), info.wAttributes);
|
||||||
|
}, nullptr);
|
||||||
|
glEnable(GL_DEBUG_OUTPUT);
|
||||||
|
#endif
|
||||||
|
|
||||||
sampler.create(GL_NEAREST);
|
initShaders();
|
||||||
ShaderManager::create(kShader::Texture, shader_v, shader_f);
|
initAssets();
|
||||||
ShaderManager::create(kShader::Color, shader_color_v, shader_color_f);
|
initLayout();
|
||||||
ShaderManager::create(kShader::UVs, shader_v, shader_uv_f);
|
|
||||||
ShaderManager::create(kShader::Font, shader_font_v, shader_font_f);
|
|
||||||
ShaderManager::create(kShader::Atlas, shader_atlas_v, shader_atlas_f);
|
|
||||||
|
|
||||||
if (!tex.load("data/uvs.jpg"))
|
|
||||||
printf("error loading image\n");
|
|
||||||
|
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glPointSize(5);
|
//glPointSize(5);
|
||||||
glLineWidth(2);
|
glLineWidth(2);
|
||||||
|
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
@@ -219,15 +234,15 @@ void App::init()
|
|||||||
//for (int i = 0; i < n; i++)
|
//for (int i = 0; i < n; i++)
|
||||||
//{
|
//{
|
||||||
// const unsigned char* s = glGetStringi(GL_EXTENSIONS, i);
|
// const unsigned char* s = glGetStringi(GL_EXTENSIONS, i);
|
||||||
// printf("GL ext %03d: %s\n", i, s);
|
// LOG("GL ext %03d: %s\n", i, s);
|
||||||
//}
|
//}
|
||||||
printf("GL version: %s\n", glGetString(GL_VERSION));
|
LOG("GL version: %s\n", glGetString(GL_VERSION));
|
||||||
printf("GL vendor: %s\n", glGetString(GL_VENDOR));
|
LOG("GL vendor: %s\n", glGetString(GL_VENDOR));
|
||||||
printf("GL renderer: %s\n", glGetString(GL_RENDERER));
|
LOG("GL renderer: %s\n", glGetString(GL_RENDERER));
|
||||||
|
|
||||||
GLfloat width_range[2];
|
GLfloat width_range[2];
|
||||||
glGetFloatv(GL_LINE_WIDTH_RANGE, width_range);
|
glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, width_range);
|
||||||
printf("GL line range: %f - %f\n", width_range[0], width_range[1]);
|
LOG("GL line range: %f - %f\n", width_range[0], width_range[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void App::update(float dt)
|
void App::update(float dt)
|
||||||
@@ -247,7 +262,7 @@ void App::update(float dt)
|
|||||||
n->draw();
|
n->draw();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
//glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||||
glEnable(GL_SCISSOR_TEST);
|
glEnable(GL_SCISSOR_TEST);
|
||||||
if (auto* main = layout[main_id])
|
if (auto* main = layout[main_id])
|
||||||
main->watch(observer);
|
main->watch(observer);
|
||||||
@@ -269,15 +284,8 @@ void App::mouse_down(int button, float x, float y)
|
|||||||
e.m_type = button ? kEventType::MouseDownR : kEventType::MouseDownL;
|
e.m_type = button ? kEventType::MouseDownR : kEventType::MouseDownL;
|
||||||
e.m_pos = { x, y };
|
e.m_pos = { x, y };
|
||||||
layout[main_id]->on_event(&e);
|
layout[main_id]->on_event(&e);
|
||||||
printf("mouse click %f %f\n", x, y);
|
LOG("mouse click %f %f\n", x, y);
|
||||||
// NodeBorder* n = new NodeBorder();
|
|
||||||
// n->SetPositioning(YGPositionTypeAbsolute);
|
|
||||||
// n->SetWidth(100);
|
|
||||||
// n->SetHeight(100);
|
|
||||||
// n->SetPosition(x, y);
|
|
||||||
// n->m_color = glm::vec4(.5, .5, .5, .5);
|
|
||||||
// layout[main_id].add_child(n);
|
|
||||||
// layout[main_id].update(width, height);
|
|
||||||
if (popup)
|
if (popup)
|
||||||
{
|
{
|
||||||
layout[main_id]->remove_child(popup);
|
layout[main_id]->remove_child(popup);
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ public:
|
|||||||
float width;
|
float width;
|
||||||
float height;
|
float height;
|
||||||
void init();
|
void init();
|
||||||
|
void initShaders();
|
||||||
|
void initAssets();
|
||||||
|
void initLayout();
|
||||||
void create();
|
void create();
|
||||||
void update(float dt);
|
void update(float dt);
|
||||||
void resize(float w, float h);
|
void resize(float w, float h);
|
||||||
|
|||||||
@@ -483,10 +483,10 @@ bool LayoutManager::load(const char* path)
|
|||||||
auto id_str = current->Attribute("id");
|
auto id_str = current->Attribute("id");
|
||||||
if (!id_str)
|
if (!id_str)
|
||||||
{
|
{
|
||||||
printf("Layout node without id\n");
|
LOG("Layout node without id\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
printf("Parsing layout: %s\n", id_str);
|
LOG("Parsing layout: %s\n", id_str);
|
||||||
uint16_t id = const_hash(id_str);
|
uint16_t id = const_hash(id_str);
|
||||||
auto p = m_layouts.find(id);
|
auto p = m_layouts.find(id);
|
||||||
if (p == m_layouts.end())
|
if (p == m_layouts.end())
|
||||||
@@ -513,7 +513,7 @@ bool LayoutManager::load(const char* path)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Layout id \"%s\" duplicated\n", id_str);
|
LOG("Layout id \"%s\" duplicated\n", id_str);
|
||||||
}
|
}
|
||||||
current = current->NextSiblingElement("layout");
|
current = current->NextSiblingElement("layout");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -354,9 +354,9 @@ int main()
|
|||||||
if (glewInit() != GLEW_OK)
|
if (glewInit() != GLEW_OK)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
printf("GL version: %s\n", glGetString(GL_VERSION));
|
LOG("GL version: %s\n", glGetString(GL_VERSION));
|
||||||
printf("GL vendor: %s\n", glGetString(GL_VENDOR));
|
LOG("GL vendor: %s\n", glGetString(GL_VENDOR));
|
||||||
printf("GL renderer: %s\n", glGetString(GL_RENDERER));
|
LOG("GL renderer: %s\n", glGetString(GL_RENDERER));
|
||||||
|
|
||||||
// If supported create a 3.1 context
|
// If supported create a 3.1 context
|
||||||
if (wglewIsSupported("WGL_ARB_create_context"))
|
if (wglewIsSupported("WGL_ARB_create_context"))
|
||||||
|
|||||||
11
engine/pch.h
11
engine/pch.h
@@ -3,9 +3,18 @@
|
|||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
#include <OpenGL/gl3.h>
|
#include <OpenGL/gl3.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#define LOG printf
|
||||||
#elif __ANDROID__
|
#elif __ANDROID__
|
||||||
|
#include <EGL/egl.h>
|
||||||
#include <GLES3/gl3.h>
|
#include <GLES3/gl3.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <android/sensor.h>
|
||||||
|
#include <android/log.h>
|
||||||
|
#include <android_native_app_glue.h>
|
||||||
|
|
||||||
|
#define LOG(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-engine", __VA_ARGS__))
|
||||||
|
|
||||||
#elif _WIN32
|
#elif _WIN32
|
||||||
#define _USE_MATH_DEFINES
|
#define _USE_MATH_DEFINES
|
||||||
#define _CRT_SECURE_NO_WARNINGS
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
@@ -13,6 +22,8 @@
|
|||||||
#include <gl\glew.h>
|
#include <gl\glew.h>
|
||||||
#include <gl\wglew.h>
|
#include <gl\wglew.h>
|
||||||
#include <gl\GL.h>
|
#include <gl\GL.h>
|
||||||
|
|
||||||
|
#define LOG printf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
Reference in New Issue
Block a user