ভার্চুয়ালবক্সে চলমান উবুন্টুর জন্য আমি কীভাবে ইজিএল এবং ওপেনগ্লিজ গ্রন্থাগার পেতে পারি?


15

ভার্চুয়ালবক্সে আমার উবুন্টু চলছে। অতিথি সংযোজনগুলি ইনস্টল করা আছে এবং এখন ওএস হ্যান্ডওয়ার ত্বরণ সক্ষম। আমার জায়গায় ওপেনজিএল লাইব্রেরি আছে।

এখন আমি উদাহরণস্বরূপ + ওপেনগ্লস 1.1 এবং 2.0 ব্যবহার করে অ্যাপস চালাতে চাই to আমি কীভাবে উবুন্টুতে উঠব?

এখানে কি কোনও ওপেন সোর্স লাইব্রেরি পাওয়া যায়?

গ্রন্থাগারগুলিতে ভার্চুয়ালবক্স-সরবরাহিত হার্ডওয়্যার ত্বরণ ক্ষমতা ব্যবহার করা উচিত।


আপনি যা জিজ্ঞাসা করছেন ঠিক তা বলা খুব কঠিন, আপনি কি আরও কিছু বিশদ হতে পারেন?
RolandiXor

উত্তর:


9

জিএলএফডাব্লু, মেসা, উবুন্টু 16.04 এএমডি 64

ভার্চুয়াল বক্সের ভিতরে আমি এটি চেষ্টা করে দেখিনি, তবে মেসার একটি সফ্টওয়্যার বাস্তবায়ন হওয়ার কারণে এটি নির্বিশেষে কাজ করা উচিত।

sudo apt-get install libglfw3-dev libgles2-mesa-dev
gcc glfw_triangle.c -lGLESv2 -lglfw

আউটপুট:

সূত্র:

#include <stdio.h>
#include <stdlib.h>

#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>

static const GLuint WIDTH = 800;
static const GLuint HEIGHT = 600;
static const GLchar* vertex_shader_source =
    "#version 100\n"
    "attribute vec3 position;\n"
    "void main() {\n"
    "   gl_Position = vec4(position, 1.0);\n"
    "}\n";
static const GLchar* fragment_shader_source =
    "#version 100\n"
    "void main() {\n"
    "   gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
    "}\n";
static const GLfloat vertices[] = {
        0.0f,  0.5f, 0.0f,
        0.5f, -0.5f, 0.0f,
    -0.5f, -0.5f, 0.0f,
};

GLint common_get_shader_program(const char *vertex_shader_source, const char *fragment_shader_source) {
    enum Consts {INFOLOG_LEN = 512};
    GLchar infoLog[INFOLOG_LEN];
    GLint fragment_shader;
    GLint shader_program;
    GLint success;
    GLint vertex_shader;

    /* Vertex shader */
    vertex_shader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertex_shader, 1, &vertex_shader_source, NULL);
    glCompileShader(vertex_shader);
    glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
    if (!success) {
        glGetShaderInfoLog(vertex_shader, INFOLOG_LEN, NULL, infoLog);
        printf("ERROR::SHADER::VERTEX::COMPILATION_FAILED\n%s\n", infoLog);
    }

    /* Fragment shader */
    fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragment_shader, 1, &fragment_shader_source, NULL);
    glCompileShader(fragment_shader);
    glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success);
    if (!success) {
        glGetShaderInfoLog(fragment_shader, INFOLOG_LEN, NULL, infoLog);
        printf("ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n%s\n", infoLog);
    }

    /* Link shaders */
    shader_program = glCreateProgram();
    glAttachShader(shader_program, vertex_shader);
    glAttachShader(shader_program, fragment_shader);
    glLinkProgram(shader_program);
    glGetProgramiv(shader_program, GL_LINK_STATUS, &success);
    if (!success) {
        glGetProgramInfoLog(shader_program, INFOLOG_LEN, NULL, infoLog);
        printf("ERROR::SHADER::PROGRAM::LINKING_FAILED\n%s\n", infoLog);
    }

    glDeleteShader(vertex_shader);
    glDeleteShader(fragment_shader);
    return shader_program;
}

int main(void) {
    GLuint shader_program, vbo;
    GLint pos;
    GLFWwindow* window;

    glfwInit();
    glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
    window = glfwCreateWindow(WIDTH, HEIGHT, __FILE__, NULL, NULL);
    glfwMakeContextCurrent(window);

    printf("GL_VERSION  : %s\n", glGetString(GL_VERSION) );
    printf("GL_RENDERER : %s\n", glGetString(GL_RENDERER) );

    shader_program = common_get_shader_program(vertex_shader_source, fragment_shader_source);
    pos = glGetAttribLocation(shader_program, "position");

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glViewport(0, 0, WIDTH, HEIGHT);

    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    glVertexAttribPointer(pos, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);
    glEnableVertexAttribArray(pos);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    while (!glfwWindowShouldClose(window)) {
        glfwPollEvents();
        glClear(GL_COLOR_BUFFER_BIT);
        glUseProgram(shader_program);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        glfwSwapBuffers(window);
    }
    glDeleteBuffers(1, &vbo);
    glfwTerminate();
    return EXIT_SUCCESS;
}

কোডের মূল লাইন লাইনগুলি হ'ল:

#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>

GLFW_INCLUDE_ES2এখানে নথিভুক্ত করা হয়েছে: http://www.glfw.org/docs/latest/build_guide.html#build_macros এবং উত্সে একটি তাত্ক্ষণিক দৃষ্টিভঙ্গি দেখায় যে এটি জিএলইএস-তে এগিয়ে রয়েছে:

 #elif defined(GLFW_INCLUDE_ES2)
  #include <GLES2/gl2.h>
  #if defined(GLFW_INCLUDE_GLEXT)
   #include <GLES2/gl2ext.h>
  #endif

এই উত্সটি মনে হয় GLES এবং ওপেনজিএল (GLES এর মতো) এর সাধারণ উপসেটে রয়েছে এবং -lGLআমরা যদি অপসারণ করি তবে এটিও সংকলন করে #define GLFW_INCLUDE_ES2

যদি আমরা GLES- তে অবিলম্বে রেন্ডারিংয়ের মতো জিনিসগুলি যুক্ত করি তবে glBeginলিঙ্কটি প্রত্যাশার সাথে ব্যর্থ হয়।

আরও দেখুন: /programming/3809236/how-to-develop-opengl-es-gles-2-0-applications-on-linux/39356268#39356268

ক্রেডিট: জিনফাল্ট কোডটিকে আরও অনেক বেশি সঠিক করেছে।

এআরএম মালি ওপেনজিএল ইএস এসডিকে

বেশ কয়েকটি আকর্ষণীয় ওপেন সোর্স উদাহরণ রয়েছে + উইন্ডোটিং সিস্টেমের বয়লারপ্লেট (এক্স 11 + ইজিএল)।

বিল্ড সিস্টেমটি এআরএম / মালি এসসিসির জন্য সহজ ক্রস সংকলন সমর্থন করে, তবে আমি এখনও এটি পরীক্ষা করি নি।

অন্তর্ভুক্ত থাকা মূল উপাদানটি "ওপেনজিএল ইএস এমুলেটর" বলে মনে হচ্ছে http://malideveloper.arm.com/resources/tools/opengl-es-emulator/ যা "ওপেনগেল ইএস 3.2 এপিআই-এর ওপেনজিএল এপিআইতে কল করে"। তবে এটি উত্স সহ প্রেরণ করে না, কেবল প্রাক-কম্পাইল করে।

অনুমতিযুক্ত বলে মনে হচ্ছে এমন একটি কাস্টম এন্টারপ্রাইজ EULA ব্যবহার করে তবে হ্যাঁ, আপনার আইনজীবীকে জিজ্ঞাসা করুন।

এসডিকে v2.4.4 এ পরীক্ষিত।


5

যেহেতু প্রশ্ন জিজ্ঞাসা করা হয়েছে, একটি প্যাকেজ উপস্থিত হয়েছিল এবং সহায়তা করতে পারে:

sudo apt-get install libgles2-mesa-dev

5

আপনি প্যাকেজ এবং প্যাকেজ সামগ্রীগুলি এর সাথে অনুসন্ধান করতে পারেন apt-cache:

> apt-cache search opengles 
mesa-utils-extra - Miscellaneous Mesa utilies (opengles, egl)

আউটপুট বলে যে ওপেনগ্লেস সম্ভবত মেসা- ইউজস -অতিরিক্ত প্যাকেজে রয়েছে । মেসা 3 ডি এর ওপেনজিএলএসের জন্য একটি প্রকল্প পৃষ্ঠা রয়েছে এবং সেখানে লিখেছেন:

মেসা ওপেনজিএল ইএস 1.1 এবং ওপেনজিএল ইএস 2.0 প্রয়োগ করে। ওপেনজিএল ইএস সম্পর্কে আরও তথ্য http://www.khronos.org/opengles/ এ পাওয়া যাবে ।

ইজিএলটি মেসায়ও নির্মিত হয়েছে:

> apt-cache search mesa | grep -i egl
mesa-utils-extra - Miscellaneous Mesa utilies (opengles, egl)
libegl1-mesa - free implementation of the EGL API -- runtime
libegl1-mesa-dbg - free implementation of the EGL API -- debugging symbols
libegl1-mesa-dev - free implementation of the EGL API -- development files
libegl1-mesa-drivers - free implementation of the EGL API -- hardware drivers
libegl1-mesa-drivers-dbg - free implementation of the EGL API -- driver debugging symbols

সুতরাং আপনি ইনস্টল করা প্রয়োজন mesa-utils-extraএবং সম্ভবত libegl1-mesa


উত্তর দেওয়ার জন্য আপনাকে অনেক ধন্যবাদ। তবে মেসা হার্ডওয়ার ত্বরণের জন্য ভার্চুয়ালবক্স ভার্চুয়াল জিপিইউ ব্যবহার করে না। ভিবাক্সে মেসা চালানোর সময় এতে সফটওয়্যার রাস্টারাইজার ব্যবহার করা হয়। আমার প্রয়োজনীয়তা হ'ল ওপেনগলস ডেমোগুলির জন্য ভার্চুয়াল বাক্স 3 ডি ত্বরণকে কঠোরভাবে ব্যবহার করা।
vboxuser

সুতরাং সম্ভবত আমাদের এটি / আপনার প্রশ্নটি এখানে দেখতে হবে: forums.virtualbox.org/…
কিবিবি

1

ব্যবহার করে দেখুন এআরএম OpenGL ES 2.0 এমুলেটর , আমি নিজেকে OpenGL ES 2.0 কাজ করতে পরিচালিত নি, তবে 1.1 জরিমানা (simpleApp ডেমো) চালানোর জন্য মনে হয়। যেমনটি আমি বুঝতে পেরেছি, এমুলেটর প্ল্যাটফর্ম GLলাইব্রেরি ব্যবহার করে এবং mesa3d (যদিও নিশ্চিত নয়) ত্বরান্বিত হওয়ায় এটি হার্ডওয়ার ত্বরান্বিত হওয়ার কথা ।

এছাড়াও আছে libgles2-mesa- তবে দুর্ভাগ্যক্রমে আমি এটি কাজ করতে পারি না। es2gears / es2tri নমুনাগুলি ক্র্যাশ করার পাশাপাশি ম্যাসা লিবারগুলির সাথে লিঙ্কযুক্ত সিম্পল অ্যাপ্লিকেশন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.