Hi, I’m new in shader mobile programming sorry from stupid question
I create OpenGLRenderer component and try use shaders.
In windows work fine, but in phone i see black screen.
Create simple check that LanguageVersion used,
windows showed version 4.5 and in phone 1 (click on screen)
Test my phone that the version is supported
I think that by default used version 1, how to switch to the second version
Android 5.1
compile setting:
android {
compileSdkVersion = 21
buildToolsVersion = “25”
defaultConfig.with {
applicationId = “appid”
minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel =21
}
}
class Shader : public Component, public OpenGLRenderer, public Timer
{
public:
Shader(){
openGLContext.setComponentPaintingEnabled(true);
openGLContext.setRenderer(this); //set openglrenderer to this
openGLContext.setContinuousRepainting(true);
openGLContext.attachTo(*this); //atach context to this
startTimer(30);
}
~Shader() {
sp->release();
}
void timerCallback(void) override
{
}
void mouseDown(const MouseEvent &m) override
{
NativeMessageBox::showMessageBoxAsync(AlertWindow::NoIcon, String(LanguageVersion), String(LanguageVersion));
}
void newOpenGLContextCreated() {}
void openGLContextClosing() {}
void renderOpenGL() override
{
static int show = 0;
if(show == 0)
{
sp = new OpenGLShaderProgram(openGLContext);
show = 1;
LanguageVersion = sp->getLanguageVersion();
const char* vsSource =
"attribute vec2 position;\n"
"attribute vec4 color;\n"
"uniform vec2 translate;\n"
"varying vec4 interpolatedColor;\n"
"void main() {\n"
" gl_Position = vec4(position.x + translate.x, position.y + translate.y, 0.0, 1.0);\n"
" interpolatedColor = color;\n"
"}\n";
const char* fsSource =
"varying vec4 interpolatedColor;\n"
"void main() {\n"
" gl_FragColor = interpolatedColor;\n"
"}\n";
sp->addVertexShader(vsSource);
sp->addFragmentShader(fsSource);
sp->link();
Program = sp->getProgramID();
attr_position = OpenGLShaderProgram::Attribute(*sp, "position").attributeID;
attr_color = OpenGLShaderProgram::Attribute(*sp, "color").attributeID;
}
glViewport(0, 0, getWidth(), getHeight());
glClear(GL_COLOR_BUFFER_BIT);
static float red[4] = { 1.0f, 0.0f, 0.0f, 1.0f };
static float colors[] = {
1.0f,0.0f,0.0f,1.0f,
0.0f,1.0f,0.0f,1.0f,
0.0f,0.0f,1.0f,1.0f,
};
static float position[] = {
-0.7f,-0.7f ,
0.7f, -0.7f ,
0.0f,0.7f
};
sp->use();
openGLContext.extensions.glEnableVertexAttribArray(attr_position);
openGLContext.extensions.glVertexAttribPointer(attr_position, 2, GL_FLOAT, false, sizeof(float) * 2, position);
openGLContext.extensions.glEnableVertexAttribArray(attr_color);
openGLContext.extensions.glVertexAttribPointer(attr_color, 4, GL_FLOAT, GL_FALSE, sizeof(float) * 4, colors);
glDrawArrays(GL_TRIANGLES, 0, 3);
return;
}
private:
OpenGLContext openGLContext;
double LanguageVersion;
ScopedPointer<OpenGLShaderProgram> sp;
GLuint Program;
GLuint attr_position;
GLuint attr_color;
};