Android OpenGl-ES2 work corectly ==> many check is done ==> we can do it only one time by cycle
This commit is contained in:
parent
085b7cb9cd
commit
cc6d40f9d6
2
Build
2
Build
@ -1 +1 @@
|
||||
Subproject commit b4c2998dc8054173f0dd055ecd66411b96eaf8cd
|
||||
Subproject commit c756ceacf5a758f882263bb5f0fbd755373f00b6
|
@ -41,6 +41,7 @@ import org.ewol.interfaceJNI;
|
||||
public class interfaceOpenGL implements GLSurfaceView.Renderer {
|
||||
|
||||
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
|
||||
|
||||
interfaceJNI.RenderInit();
|
||||
}
|
||||
|
||||
|
@ -47,6 +47,9 @@ public class interfaceSurfaceView extends GLSurfaceView {
|
||||
// super must be first statement in constructor
|
||||
super(context);
|
||||
|
||||
// Create an OpenGL ES 2.0 context
|
||||
setEGLContextClientVersion(2);
|
||||
|
||||
// je n'ai pas compris ...
|
||||
m_ewolDrawer = new interfaceOpenGL();
|
||||
setRenderer(m_ewolDrawer);
|
||||
|
@ -724,6 +724,7 @@ char * etk::File::fGets(char * elementLine, int32_t maxData)
|
||||
memset(elementLine, 0, maxData);
|
||||
#ifdef __TARGET_OS__Android
|
||||
char * element = elementLine;
|
||||
int32_t outSize = 0;
|
||||
if (etk::FILE_TYPE_DATA == m_type) {//char * tmpData = internalDataFiles[iii].data + m_readingOffset;
|
||||
if (NULL == m_zipData) {
|
||||
element[0] = '\0';
|
||||
@ -750,8 +751,19 @@ char * etk::File::fGets(char * elementLine, int32_t maxData)
|
||||
*element = '\0';
|
||||
return elementLine;
|
||||
}
|
||||
// check maxData Size ...
|
||||
if (outSize>=maxData-1) {
|
||||
*element = '\0';
|
||||
return elementLine;
|
||||
}
|
||||
outSize++;
|
||||
}
|
||||
if (outSize==0) {
|
||||
return NULL;
|
||||
} else {
|
||||
// send last line
|
||||
return elementLine;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return fgets(elementLine, maxData, m_PointerFile);
|
||||
|
@ -186,6 +186,36 @@ namespace etk {
|
||||
tmpp *= obj;
|
||||
return tmpp;
|
||||
}
|
||||
/*****************************************************
|
||||
* other basic function :
|
||||
*****************************************************/
|
||||
void Transpose(void)
|
||||
{
|
||||
float tmpVal = m_mat[1];
|
||||
m_mat[1] = m_mat[4];
|
||||
m_mat[4] = tmpVal;
|
||||
|
||||
tmpVal = m_mat[2];
|
||||
m_mat[2] = m_mat[8];
|
||||
m_mat[8] = tmpVal;
|
||||
|
||||
tmpVal = m_mat[6];
|
||||
m_mat[6] = m_mat[9];
|
||||
m_mat[9] = tmpVal;
|
||||
|
||||
tmpVal = m_mat[3];
|
||||
m_mat[3] = m_mat[12];
|
||||
m_mat[12] = tmpVal;
|
||||
|
||||
tmpVal = m_mat[7];
|
||||
m_mat[7] = m_mat[13];
|
||||
m_mat[13] = tmpVal;
|
||||
|
||||
tmpVal = m_mat[11];
|
||||
m_mat[11] = m_mat[14];
|
||||
m_mat[14] = tmpVal;
|
||||
|
||||
}
|
||||
};
|
||||
namespace matrix {
|
||||
Matrix Perspective(float left, float right, float bottom, float top, float nearVal, float farVal);
|
||||
|
@ -18,6 +18,7 @@ LOCAL_C_INCLUDES :=
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
|
||||
|
||||
LOCAL_EXPORT_LDLIBS := -lGLESv2 -ldl -llog
|
||||
#LOCAL_EXPORT_LDLIBS := -lGLESv1_CM -ldl -llog
|
||||
|
||||
LOCAL_CFLAGS := -Wno-write-strings \
|
||||
-DEWOL_VERSION_TAG_NAME="\"$(LOCAL_VERSION_TAG_SHORT)-$(BUILD_DIRECTORY_MODE)\"" \
|
||||
@ -32,9 +33,6 @@ include $(LOCAL_PATH)/file.mk
|
||||
|
||||
LOCAL_SRC_FILES := ewol/os/gui.Android.cpp $(FILE_LIST)
|
||||
|
||||
# Ewol Test Software :
|
||||
LOCAL_LDLIBS := -lGLESv2 -ldl -llog -lz
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
|
||||
|
@ -120,6 +120,11 @@ ewol::TexturedFont::TexturedFont(etk::UString fontName) :
|
||||
}
|
||||
int32_t nbLine = (nbElement / nbRaws) + 1;
|
||||
int32_t textureHeight = nextP2(nbLine*glyphMaxHeight);
|
||||
// for android :
|
||||
textureHeight = etk_max(textureHeight, textureWidth);
|
||||
textureWidth = textureHeight;
|
||||
|
||||
|
||||
EWOL_DEBUG("Generate a text texture for char(" << nbRaws << "," << nbLine << ") with size=(" << textureWidth << "," << textureHeight << ")");
|
||||
// resize must be done on the texture ...
|
||||
SetImageSize(Vector2D<int32_t>(textureWidth,textureHeight));
|
||||
|
@ -29,12 +29,15 @@
|
||||
#include <ewol/openGL/Program.h>
|
||||
#include <ewol/ResourceManager.h>
|
||||
|
||||
//#define LOCAL_DEBUG EWOL_VERBOSE
|
||||
#define LOCAL_DEBUG EWOL_DEBUG
|
||||
|
||||
ewol::Program::Program(etk::UString& filename) :
|
||||
ewol::Resource(filename),
|
||||
m_program(0),
|
||||
m_hasTexture(false)
|
||||
{
|
||||
|
||||
EWOL_DEBUG("OGL : load PROGRAM \"" << filename << "\"");
|
||||
// load data from file "all the time ..."
|
||||
|
||||
etk::File file(m_name, etk::FILE_TYPE_DATA);
|
||||
@ -55,6 +58,7 @@ ewol::Program::Program(etk::UString& filename) :
|
||||
#define MAX_LINE_SIZE (2048)
|
||||
char tmpData[MAX_LINE_SIZE];
|
||||
while (file.fGets(tmpData, MAX_LINE_SIZE) != NULL) {
|
||||
EWOL_DEBUG(" Read data : \"" << tmpData << "\"");
|
||||
int32_t len = strlen(tmpData);
|
||||
if( tmpData[len-1] == '\n'
|
||||
|| tmpData[len-1] == '\r') {
|
||||
@ -96,10 +100,10 @@ ewol::Program::~Program(void)
|
||||
m_hasTexture = false;
|
||||
}
|
||||
|
||||
static void checkGlError(const char* op)
|
||||
static void checkGlError(const char* op, int32_t localLine)
|
||||
{
|
||||
for (GLint error = glGetError(); error; error = glGetError()) {
|
||||
EWOL_INFO("after " << op << "() glError (" << error << ")");
|
||||
EWOL_INFO("after " << op << "():" << localLine << " glError(" << error << ")");
|
||||
}
|
||||
}
|
||||
|
||||
@ -118,18 +122,21 @@ bool ewol::Program::CreateAndLink(void)
|
||||
for (int32_t iii=0; iii<m_shaderList.Size(); iii++) {
|
||||
if (NULL != m_shaderList[iii]) {
|
||||
glAttachShader(m_program, m_shaderList[iii]->GetGL_ID());
|
||||
checkGlError("glAttachShader");
|
||||
checkGlError("glAttachShader", __LINE__);
|
||||
}
|
||||
}
|
||||
glLinkProgram(m_program);
|
||||
checkGlError("glLinkProgram", __LINE__);
|
||||
GLint linkStatus = GL_FALSE;
|
||||
glGetProgramiv(m_program, GL_LINK_STATUS, &linkStatus);
|
||||
checkGlError("glGetProgramiv", __LINE__);
|
||||
if (linkStatus != GL_TRUE) {
|
||||
GLint bufLength = 0;
|
||||
l_bufferDisplayError[0] = '\0';
|
||||
glGetProgramInfoLog(m_program, LOG_OGL_INTERNAL_BUFFER_LEN, &bufLength, l_bufferDisplayError);
|
||||
EWOL_ERROR("Could not compile \"PROGRAM\": " << l_bufferDisplayError);
|
||||
glDeleteProgram(m_program);
|
||||
checkGlError("glDeleteProgram", __LINE__);
|
||||
m_program = 0;
|
||||
return false;
|
||||
}
|
||||
@ -149,7 +156,7 @@ int32_t ewol::Program::GetAttribute(etk::UString tmpElement)
|
||||
tmp.m_isAttribute = true;
|
||||
tmp.m_elementId = glGetAttribLocation(m_program, tmp.m_name.c_str());
|
||||
if (tmp.m_elementId<0) {
|
||||
checkGlError("glGetAttribLocation");
|
||||
checkGlError("glGetAttribLocation", __LINE__);
|
||||
EWOL_INFO("glGetAttribLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
||||
return -1;
|
||||
}
|
||||
@ -170,7 +177,7 @@ int32_t ewol::Program::GetUniform(etk::UString tmpElement)
|
||||
tmp.m_isAttribute = false;
|
||||
tmp.m_elementId = glGetUniformLocation(m_program, tmp.m_name.c_str());
|
||||
if (tmp.m_elementId<0) {
|
||||
checkGlError("glGetUniformLocation");
|
||||
checkGlError("glGetUniformLocation", __LINE__);
|
||||
EWOL_INFO("glGetUniformLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
||||
return -1;
|
||||
}
|
||||
@ -190,24 +197,29 @@ void ewol::Program::SendAttribute(int32_t idElem, int32_t nbElement, void* point
|
||||
GL_FALSE, // take our values as-is
|
||||
jumpBetweenSample, // no extra data between each position
|
||||
pointer); // Pointer on the buffer
|
||||
checkGlError("glVertexAttribPointer", __LINE__);
|
||||
glEnableVertexAttribArray(m_elementList[idElem].m_elementId);
|
||||
checkGlError("glEnableVertexAttribArray", __LINE__);
|
||||
}
|
||||
|
||||
|
||||
void ewol::Program::SendUniformMatrix4fv(int32_t idElem, int32_t nbElement, float* pointer)
|
||||
void ewol::Program::SendUniformMatrix4fv(int32_t idElem, int32_t nbElement, etk::Matrix _matrix)
|
||||
{
|
||||
if (idElem<0 || idElem>m_elementList.Size()) {
|
||||
EWOL_ERROR("idElem = " << idElem << " not in [0.." << (m_elementList.Size()-1) << "]");
|
||||
return;
|
||||
}
|
||||
glUniformMatrix4fv(m_elementList[idElem].m_elementId, nbElement, GL_TRUE, pointer);
|
||||
// note : Android des not supported the transposition of the matrix, then we will done it oursef:
|
||||
_matrix.Transpose();
|
||||
glUniformMatrix4fv(m_elementList[idElem].m_elementId, nbElement, GL_FALSE, _matrix.m_mat);
|
||||
checkGlError("glUniformMatrix4fv", __LINE__);
|
||||
}
|
||||
|
||||
|
||||
void ewol::Program::Use(void)
|
||||
{
|
||||
glUseProgram(m_program);
|
||||
checkGlError("glUseProgram");
|
||||
checkGlError("glUseProgram", __LINE__);
|
||||
}
|
||||
|
||||
|
||||
@ -216,23 +228,32 @@ void ewol::Program::SetTexture0(int32_t idElem, GLint textureOpenGlID)
|
||||
if (idElem<0 || idElem>m_elementList.Size()) {
|
||||
return;
|
||||
}
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
#if 0
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
checkGlError("glEnable", __LINE__);
|
||||
#endif
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
checkGlError("glActiveTexture", __LINE__);
|
||||
// set the textureID
|
||||
glBindTexture(GL_TEXTURE_2D, textureOpenGlID);
|
||||
checkGlError("glBindTexture", __LINE__);
|
||||
// Set the texture on the uniform attribute
|
||||
glUniform1i(m_elementList[idElem].m_elementId, /*GL_TEXTURE*/0);
|
||||
checkGlError("glUniform1i", __LINE__);
|
||||
m_hasTexture = true;
|
||||
}
|
||||
|
||||
void ewol::Program::UnUse(void)
|
||||
{
|
||||
#if 0
|
||||
if (true == m_hasTexture) {
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
checkGlError("glDisable", __LINE__);
|
||||
m_hasTexture = false;
|
||||
}
|
||||
#endif
|
||||
glUseProgram(0);
|
||||
checkGlError("glUseProgram");
|
||||
checkGlError("glUseProgram", __LINE__);
|
||||
}
|
||||
|
||||
|
||||
|
@ -56,7 +56,7 @@
|
||||
int32_t GetAttribute(etk::UString tmpElement);
|
||||
void SendAttribute(int32_t idElem, int32_t nbElement, void* pointer, int32_t jumpBetweenSample=0);
|
||||
int32_t GetUniform(etk::UString tmpElement);
|
||||
void SendUniformMatrix4fv(int32_t idElem, int32_t nbElement, float* pointer);
|
||||
void SendUniformMatrix4fv(int32_t idElem, int32_t nbElement, etk::Matrix pointer);
|
||||
void Use(void);
|
||||
void SetTexture0(int32_t idElem, GLint textureOpenGlID);
|
||||
void UnUse(void);
|
||||
|
@ -37,6 +37,7 @@ ewol::Shader::Shader(etk::UString& filename):
|
||||
m_shader(0),
|
||||
m_type(0)
|
||||
{
|
||||
EWOL_DEBUG("OGL : load SHADER \"" << filename << "\"");
|
||||
// load data from file "all the time ..."
|
||||
|
||||
etk::File file(m_name, etk::FILE_TYPE_DATA);
|
||||
@ -109,20 +110,32 @@ bool ewol::Shader::CompileAndSendShader(void)
|
||||
m_shader = 0;
|
||||
return false;
|
||||
}
|
||||
EWOL_DEBUG(" --> Create");
|
||||
m_shader = glCreateShader(m_type);
|
||||
EWOL_DEBUG(" <-- Create");
|
||||
if (!m_shader) {
|
||||
EWOL_ERROR("glCreateShader return error ...");
|
||||
EWOL_DEBUG(" --> checkGlError");
|
||||
checkGlError("glCreateShader");
|
||||
EWOL_DEBUG(" <-- checkGlError");
|
||||
return false;
|
||||
} else {
|
||||
EWOL_DEBUG(" --> glShaderSource");
|
||||
glShaderSource(m_shader, 1, (const char**)&m_fileData, NULL);
|
||||
EWOL_DEBUG(" <-- glShaderSource");
|
||||
EWOL_DEBUG(" --> glCompileShader");
|
||||
glCompileShader(m_shader);
|
||||
EWOL_DEBUG(" <-- glCompileShader");
|
||||
GLint compiled = 0;
|
||||
EWOL_DEBUG(" --> glGetShaderiv");
|
||||
glGetShaderiv(m_shader, GL_COMPILE_STATUS, &compiled);
|
||||
EWOL_DEBUG(" <-- glGetShaderiv");
|
||||
if (!compiled) {
|
||||
GLint infoLen = 0;
|
||||
l_bufferDisplayError[0] = '\0';
|
||||
EWOL_DEBUG(" --> glGetShaderInfoLog");
|
||||
glGetShaderInfoLog(m_shader, LOG_OGL_INTERNAL_BUFFER_LEN, &infoLen, l_bufferDisplayError);
|
||||
EWOL_DEBUG(" <-- glGetShaderInfoLog");
|
||||
const char * tmpShaderType = "GL_FRAGMENT_SHADER";
|
||||
if (m_type == GL_VERTEX_SHADER){
|
||||
tmpShaderType = "GL_VERTEX_SHADER";
|
||||
|
@ -45,6 +45,7 @@ static Vector2D<int32_t> windowsSize(320, 480);
|
||||
static ewol::eSystemInput l_managementInput;
|
||||
|
||||
enum {
|
||||
THREAD_INIT,
|
||||
THREAD_RECALCULATE_SIZE,
|
||||
THREAD_RESIZE,
|
||||
THREAD_HIDE,
|
||||
@ -104,6 +105,10 @@ void ewolProcessEvents(void)
|
||||
l_msgSystem.Wait(data);
|
||||
//EWOL_DEBUG("EVENT");
|
||||
switch (data.TypeMessage) {
|
||||
case THREAD_INIT:
|
||||
// this is due to the openGL context
|
||||
APP_Init();
|
||||
break;
|
||||
case THREAD_RECALCULATE_SIZE:
|
||||
eSystem::ForceRedrawAll();
|
||||
break;
|
||||
@ -226,11 +231,18 @@ void eSystem::SetArchiveDir(int mode, const char* str)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool isGlobalSystemInit = false;
|
||||
|
||||
void RequestInit(void)
|
||||
{
|
||||
if (true == isGlobalSystemInit) {
|
||||
eSystemMessage_ts data;
|
||||
data.TypeMessage = THREAD_INIT;
|
||||
l_msgSystem.Post(data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void eSystem::Init(void)
|
||||
{
|
||||
EWOL_INFO("==> Ewol System Init (BEGIN)");
|
||||
@ -248,8 +260,9 @@ void eSystem::Init(void)
|
||||
ewol::widgetManager::Init();
|
||||
ewol::font::Init();
|
||||
ewol::shortCut::Init();
|
||||
APP_Init();
|
||||
isGlobalSystemInit = true;
|
||||
// request the init of the application in the main context of openGL ...
|
||||
RequestInit();
|
||||
// force a recalculation
|
||||
ewol::RequestUpdateSize();
|
||||
}
|
||||
@ -279,6 +292,7 @@ void eSystem::UnInit(void)
|
||||
EWOL_INFO("==> Ewol System Un-Init (END)");
|
||||
}
|
||||
|
||||
|
||||
void ewol::RequestUpdateSize(void)
|
||||
{
|
||||
if (true == isGlobalSystemInit) {
|
||||
|
@ -1,3 +1,8 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
varying vec4 f_color;
|
||||
|
||||
void main(void) {
|
||||
|
@ -1,3 +1,8 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
// Input :
|
||||
attribute vec2 EW_coord2d;
|
||||
attribute vec4 EW_color;
|
||||
|
@ -1,3 +1,8 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
// Input :
|
||||
uniform sampler2D EW_texID;
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
// Input :
|
||||
attribute vec2 EW_coord2d;
|
||||
attribute vec2 EW_texture2d;
|
||||
|
@ -1,3 +1,8 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
// Input :
|
||||
uniform sampler2D EW_texID;
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
// Input :
|
||||
attribute vec2 EW_coord3d;
|
||||
attribute vec2 EW_texture2d;
|
||||
|
Loading…
x
Reference in New Issue
Block a user