рдУрдкрди рд╕реНрдЯреВрдбрд┐рдпреЛ рдИрдПрд╕ 2.0 рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЗрди рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реА ++

рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ред рдХреНрдпреЛрдВ?

рдПрдВрдбреНрд░реЙрдЗрдб NDK рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, Xcode рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ 90% рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди Win32 рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЧреЗрдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдЧреЗрдо рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХреЗ, рдпрд╛ рдЧреЗрдо рдпрд╛ рд▓реЗрд╡рд▓ рдПрдбрд┐рдЯрд░ рдХрд╛ рд╡реАрдбрд┐рдпреЛ рд╢реВрдЯ рдХрд░ рд╕рдХреЗ, рдЗрд╕рдореЗрдВ рдЧреЗрдо рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрдорди рдХреЛрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд▓реЗрд╡рд▓ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП OpenGL ES 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдк Xcode рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рд╕рд┐рд░реНрдл рдЖрдк рдПрдХ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдлреИрди рд╣реИрдВред

рдХреИрд╕реЗ?

AngleProject рдХреЛрдбред ANGLE рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ DirectX SDK рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд╡реАрдирддрдо рдЙрдкрд▓рдмреНрдз рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдПрд╕рдбреАрдХреЗ рдЬреВрди 2010 рдПрдХ рдЖрдзреБрдирд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИред S1023 рддреНрд░реБрдЯрд┐ рдкреЙрдк рдЕрдкред рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ Visual C ++ 2010 Redistributable Package рдХреА рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░рдиреА рд╣реЛрдЧреА
MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5} MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7} 

рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ DirectX SDK рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдЕрдм рдЖрдк ANGLE рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрддрд┐рдо рдЪрд░рдг рдУрдкрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ ES 2.0 рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рд┐рдд libEGL.dll, libGLESv2.dll рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реИ

рд▓рд┐рдВрдХрд░ рдореЗрдВ - рдЗрдирдкреБрдЯ - рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЬреЛрдбрд╝реЗрдВ
 esUtil.lib libEGL.lib libGLESv2.lib 

libEGL.dll, libGLESv2.dll рдХреЛ рдбреАрдмрдЧ, рд░рд┐рд▓реАрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ

esUtil.lib - рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ OpenGL ES 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЙрджрд╛рд╣рд░рдгред рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдкрд░рд┐рдгрд╛рдо

рдпрджрд┐ рдЖрдк рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд▓реЛрдЧреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рддреИрдпрд╛рд░-рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯрдбреАрд╢рди 2010 рд╕реЗ рдУрдкрди рдПрд╕рдПрд▓ 2.0 рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдПрд╕рдбреАрдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЬрдм рдЖрдк рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рджреЗрдЦреЗрдВрдЧреЗ



рдпрд╣ рдЕрдЧрд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
OpenGL ES 2.0 рдЙрджрд╛рд╣рд░рдг рдПрдХ рддреНрд░рд┐рдХреЛрдг рдЦреАрдВрдЪрддрд╛ рд╣реИ
 // // Book: OpenGL(R) ES 2.0 Programming Guide // Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner // ISBN-10: 0321502795 // ISBN-13: 9780321502797 // Publisher: Addison-Wesley Professional // URLs: http://safari.informit.com/9780321563835 // http://www.opengles-book.com // // Hello_Triangle.c // // This is a simple example that draws a single triangle with // a minimal vertex/fragment shader. The purpose of this // example is to demonstrate the basic concepts of // OpenGL ES 2.0 rendering. #include <stdlib.h> #include "esUtil.h" typedef struct { // Handle to a program object GLuint programObject; } UserData; /// // Create a shader object, load the shader source, and // compile the shader. // GLuint LoadShader ( GLenum type, const char *shaderSrc ) { GLuint shader; GLint compiled; // Create the shader object shader = glCreateShader ( type ); if ( shader == 0 ) return 0; // Load the shader source glShaderSource ( shader, 1, &shaderSrc, NULL ); // Compile the shader glCompileShader ( shader ); // Check the compile status glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled ); if ( !compiled ) { GLint infoLen = 0; glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen ); if ( infoLen > 1 ) { char* infoLog = malloc (sizeof(char) * infoLen ); glGetShaderInfoLog ( shader, infoLen, NULL, infoLog ); esLogMessage ( "Error compiling shader:\n%s\n", infoLog ); free ( infoLog ); } glDeleteShader ( shader ); return 0; } return shader; } /// // Initialize the shader and program object // int Init ( ESContext *esContext ) { UserData *userData = esContext->userData; GLbyte vShaderStr[] = "attribute vec4 vPosition; \n" "void main() \n" "{ \n" " gl_Position = vPosition; \n" "} \n"; GLbyte fShaderStr[] = "precision mediump float;\n"\ "void main() \n" "{ \n" " gl_FragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 );\n" "} \n"; GLuint vertexShader; GLuint fragmentShader; GLuint programObject; GLint linked; // Load the vertex/fragment shaders vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr ); fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr ); // Create the program object programObject = glCreateProgram ( ); if ( programObject == 0 ) return 0; glAttachShader ( programObject, vertexShader ); glAttachShader ( programObject, fragmentShader ); // Bind vPosition to attribute 0 glBindAttribLocation ( programObject, 0, "vPosition" ); // Link the program glLinkProgram ( programObject ); // Check the link status glGetProgramiv ( programObject, GL_LINK_STATUS, &linked ); if ( !linked ) { GLint infoLen = 0; glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen ); if ( infoLen > 1 ) { char* infoLog = malloc (sizeof(char) * infoLen ); glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog ); esLogMessage ( "Error linking program:\n%s\n", infoLog ); free ( infoLog ); } glDeleteProgram ( programObject ); return FALSE; } // Store the program object userData->programObject = programObject; glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f ); return TRUE; } /// // Draw a triangle using the shader pair created in Init() // void Draw ( ESContext *esContext ) { UserData *userData = esContext->userData; GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f }; // Set the viewport glViewport ( 0, 0, esContext->width, esContext->height ); // Clear the color buffer glClear ( GL_COLOR_BUFFER_BIT ); // Use the program object glUseProgram ( userData->programObject ); // Load the vertex data glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices ); glEnableVertexAttribArray ( 0 ); glDrawArrays ( GL_TRIANGLES, 0, 3 ); eglSwapBuffers ( esContext->eglDisplay, esContext->eglSurface ); } int main ( int argc, char *argv[] ) { ESContext esContext; UserData userData; esInitContext ( &esContext ); esContext.userData = &userData; esCreateWindow ( &esContext, TEXT("Hello Triangle"), 320, 240, ES_WINDOW_RGB ); if ( !Init ( &esContext ) ) return 0; esRegisterDrawFunc ( &esContext, Draw ); esMainLoop ( &esContext ); } 


рдПрдХ рдЕрдЪреНрдЫрд╛ рдУрдкрди ES 2.0 рдХреЛрдбрд┐рдВрдЧ рд╣реИ!

Source: https://habr.com/ru/post/In199396/


All Articles