[ Predrag Damnjanovic @ 25.03.2002. 14:09 ] @
--- Spremanje kompajlera za OpenGL pod Windowsom ---

----------------- 0. korak -----------------
Prvo, evo koji su sve fajlovi potrebni (podelicu ih u 3 grupe):

- gl.h
- glu.h
- glut.h (opciono, mada preporucujem koriscenje GLUT-a)

- opengl32.dll (vec ga imate u sistemskom direktorijumu Windowsa)
- glu32.dll (takodje ga imate u sistemskom direktorijumu Windowsa)
- glut32.dll (opciono)

- opengl32.lib
- glu32.lib
- glut32.lib (opciono)

----------------- 1. korak -----------------

Generalno, svaki normalan kompajler vec ima gl.h i glu.h.
Dakle, verovatno vam samo treba glut.h, i njega mozete skinuti sa http://www.xmission.com/~nate/glut.html (treba vam ona binarna verzija, koja sadrzi, header fajl, dll fajl, i lib fajl za VC++).
Sa tog sajta cete skinuti ZIP fajl u kojem cete naci glut.h, koji trebate da iskopirate u direktorijum /include/GL vaseg kompajlera. Ako ne znate koji je to direktorijum, potrazite na disku fajl gl.h i pogledajte u kom direktoriju se on nalazi - u tom treba i ovaj.

Ako pak nemate gl.h i glu.h, onda:
1) ili skinite Mesa biblioteku - http://www.mesa3d.org/. Trebalo bi da je iskompajlirate, a ako vam to ne podje za rukom onda procitajte drugi predlog.
2) ili skinite http://download.microsoft.com/.../info/1/W95/EN-US/Opengl95.exe - tu cete naci gl.h i glu.h.
Prvi predlog NE preporucujem pocetnicima, jer ne verujem da ce uspeti da iskompajliraju Mesa biblioteku. Za pocetnike preporucujem drugi predlog!


----------------- 2. korak -----------------

Dalje, opengl32.dll i glu32.dll 99% vec imate u sistemskom direktorijumu Windowsa. Ako ih nemate, skinite ih sa http://download.microsoft.com/.../info/1/W95/EN-US/Opengl95.exe (ovaj link smo vec gore davali) i iskopirajte ih u sistemskom direktorijumu Windowsa.
Fajl glut32.dll se nalazi u onom GLUT-ovom ZIP fajlu koji ste vec skinuli, i njega iskopirajte u sistemski direktorijum Windowsa (najcesce je to c:\windows\system)

----------------- 3. korak -----------------

I na kraju treba kreirati .lib fajlove.
LIB fajlovi sadrze spisak funkcija koji neki DLL sadrzi. Kompajleru je potreban taj spisak da bi znao koje funkcije (koje pozivas iz programa) postoje u odredjenom DLL-u.

Kod VC++a su .lib fajlovi vec kreirani, ili se kreiraju automatski, tako da ako koristite VC++ nista ne trebate da radite u ovom koraku.
Ovo pricam napamet (tako sam cuo), jer nemam kod sebe VC++ da ovo proverim.
Moguce je jedino (ako koristite VC++) da vam nedostaje glut32.lib, a njega imate u onom GLUT-ovom ZIP fajlu koji ste skinuli. Iskopirajte ga u /lib direktorijum VC++a (putanja je skoro ista kao do /include, samo sto se ne zavrsava sa /include nego sa /lib)
Ako kojim slucajem nemate opengl32.lib i glu32.lib - skinite http://download.microsoft.com/.../info/1/W95/EN-US/Opengl95.exe (ovaj link smo vec davali gore) - tu cete ih naci, pa ih samo iskopirajte /lib direktorijum VC++a.

Kreiranje .lib fajlova kod Borlandovog kompajlera se postize komandom implib [imefajla].lib [imefajla].dll (koju naravno treba ukucati u command promptu).
Generalno, treba otkucati sledece ako koristite Borlandov kompajler:
implib opengl32.lib opengl32.dll
implib glu32.lib glu32.dll
implib glut32.lib glut32.dll

Kada pravite ove .lib fajlove, vodite racuna da vam .dll fajlovi (koje navodite) budu u direktorijumu u kojem se nalazite. Fajlove opengl32.dll i glu32.dll imate u sistemskom direktorijumu Windowsa, pa ili ih iskopirajte u direktorijum u kome se nalazite, ili u komandoj liniji navedite putanju do DLLa (ovako: implib glu32.lib c:\windows\system32\glu32.dll). Fajl glut32.dll imate u onom GLUT-ovom ZIP fajlu koji ste skinuli...
Kreirane .lib fajlove zatim treba iskopirati u /lib direktorijum vaseg kompajlera (putanja je skoro ista kao do /include, samo sto se ne zavrsava sa /include nego sa /lib).

Verovatno je i kod ostalih kompajlera slican postupak kreiranja .lib fajla (mozda cak i potpuno isti).

----------------- 4. korak -----------------
Svo 'spremanje kompajlera' je gotovo, i sada treba videti kako izgleda jedan OpenGL program:

Citat:

#if (defined(__WIN32__) || defined(WIN32))
#include <windows.h>
#endif

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

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

GLfloat boja1[] = { 0.3, 0.7, 0.0, 1.0 };
GLfloat boja2[] = { 0.0, 0.2, 0.8, 1.0 };
float i=0;

void draw(void)
{
i++;
if (i>360) i=0;

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();
glTranslatef (0, 0, 50);
glMaterialfv(GL_FRONT, GL_DIFFUSE, boja1);
glBegin (GL_QUADS);
glTexCoord2f (0.0,0.0);
glVertex3f (-10.0, -10.0, 20.0);
glTexCoord2f (1.0, 0.0);
glVertex3f (10.0, -10.0, 35.0);
glTexCoord2f (1.0, 1.0);
glVertex3f (10.0, 10.0, 0.0);
glTexCoord2f (0.0, 1.0);
glVertex3f (-10.0, 10.0, 0.0);
glEnd ();
glPopMatrix();

glPushMatrix();
glTranslatef (0, 0, 50);
glRotatef(i, 1, 0, 0);
glRotatef(i, 0, 1, 0);
glMaterialfv(GL_FRONT, GL_DIFFUSE, boja2);
glutSolidTorus (1, 3, 3, 3);
glPopMatrix();

glutSwapBuffers();
}

void light (void)
{
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
glLightfv (GL_LIGHT0, GL_POSITION, light_position);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}

void reshape (int width, int height)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 1.0f, 1000.0f);
gluLookAt(0, 0, -1, 0, 0, 0, 0, 1.0, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}

int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_RGB|GLUT_DEPTH);
glutEnterGameMode();
glutDisplayFunc(draw);
glutSetCursor(GLUT_CURSOR_NONE);
reshape(640,480);
light();
glutKeyboardFunc(keyboard);
glutIdleFunc(draw);
glutMainLoop();
return 0;
}


Znate vec kako se kompajlira...
Ako koristite Borland C/C++ FREE compiler (koga mozete skinuti sa ftp://ftpd.borland.com/downloa...ilder/freecommandLinetools.exe - 8.5 MB), to ide ovako (u command promptu): bcc32 primer.c
Ako se bcc32 ne odaziva, verovatno niste procitali readme.txt koji zahteva da se rucno konfigurisu putanje do kompajlera i linkera.

Za ucenje OpenGL-a preporucujem odlican tutorijal na adresi: http://ask.ii.uib.no/ebt-bin/n...naweb/SGI_Developer/OpenGL_PG/
Srecno!!!

[Ovu poruku je menjao zastita dana 29.03.2002 u 12:00 AM GMT]
[ Predrag Damnjanovic @ 25.03.2002. 14:10 ] @
--- Spremanje kompajlera za OpenGL pod Linuxom ---

Ukratko, treba vam MesaLIB (skinite je sa http://www.mesa3d.org/) i glut-lib ( http://www.opengl.org/developers/documentation/glut/index.html - skinuti source code distribuciju). Iskompajlirajte obe biblioteke, i to je to.
Ako koristite RedHat, imate sve to vec iskompajlirano - nadjite na instalacionim CD-ima mesa-devel RPM fajl, i instalirajte ga. MADA, ja mislim da je mesa-devel po defaultu vec instaliran!
Kompajliranje OpenGL programa ide ovako: gcc primer.c -o primer -lGL -lGLU -lglut
Naravno, kompajlirani program se startuje sa ./primer , a inace, source code je isti kao i za Win, sve je 100% portabilno.

Jos samo da kazem da je za brze 2D/3D perfomanse neophodno skinuti drajvere za graficku karticu. Sto se tice NVidia kartice, njihove drajvere cete naci na sajtu www.nvidia.com, pa tamo pod Drivers / Linux...
Bez tih drajvera cete imate oko 3 frejma po sekundi (ja sa drajverima imam oko 200-300 frejma po sekundi)
Srecno!
[ Dragi Tata @ 25.03.2002. 16:13 ] @
Samo da dodam dve sitnice:

1. Za Windows: Od 32-bitnih Windows-a, jedino Win 95 nema fajlove opengl32.dll i glu32.dll. Svi ostali (98/ME, NT) ih imaju.

2. Za Linux: I Mandrake distribucija (bar verzija 7.2) ima Mesa-u na instalacionim CD-ovima.
[ Predrag Damnjanovic @ 28.03.2002. 21:39 ] @
--- Evo kako 'spremiti' VC++ za OpenGL ---

Ako imate VC++, samo ubacite glut.h u /include i glut32.lib i /lib.
To je sve.
Iz 2 koraka se instalira opengl na VC++ !!!

[Ovu poruku je menjao zastita dana 03.04.2002 u 04:04 PM GMT]
[ Markotron @ 23.07.2006. 23:40 ] @
Zasto mi javi "undefinded reference ....."???
[ tosa @ 24.07.2006. 02:40 ] @
Tema je stara preko 4 godine. Na šta konkretno misliš?
[ Markotron @ 24.07.2006. 08:26 ] @
Sve sam napravio sto pise gore....

Kopiro sam tri .dll fajla u system dir, to je u redu tamo su.
Kopiro sam tri .h fajla u include dir i kopiro sam tri .lib fajla u lib dir... i to je sve sto sam napravio... međutim kad pokusam pokrenuti neki program koji u sebi sadrži #include <gl/glut.h> javlja mi gresku:

[Linker error] undefined reference to `[email protected]'
[Linker error] undefined reference to `[email protected]'
[Linker error] undefined reference to `[email protected]'

inace ako nema tog includa radi normalno.

Nekuzim u cemu je problem? Mozda moram nesto podesit u dev-c++-u?
[ bkaradzic @ 24.07.2006. 22:33 ] @
Skini glut-3.7.6-bin.zip sa http://www.xmission.com/~nate/glut.html.

U "additional dependencies" polje za linker ubaci glut32.lib i kopiraj glut32.dll u windows/system folder ili u folder odakle se .exe fajl izvršava...
[ Markotron @ 24.07.2006. 23:38 ] @
skinuo sam, unzipo i kopiru sam dll u system, a lib sam kopiro u lib direktori dev-cppa, dok glut.h sam kopiro u include direktorij dev-cppa.
no i dalje mi ne radi
[ bkaradzic @ 24.07.2006. 23:57 ] @
Citat:
Markotron: no i dalje mi ne radi

Da li dobijaš istu linker grešku ili je sada nešto drugo?

Moraš da budeš precizan da bi mogli da ti pomognemo... Ovo da ti i dalje ne radi ništa ne znači. Uvek napiši šta vidiš u output prozoru.
[ Markotron @ 25.07.2006. 10:45 ] @
Uvjak isto, odnosno nisam nista ni mjenja jer sto si mi ti reko da napravim ja sam ve uradio.

Jedino ovaj 'additional dependecies' ne znam sta znci. Gdje je to polje za linker
[ mikikg @ 01.02.2020. 15:35 ] @
Posle dosta godina od kada je ova tema startovana, OpenGL je i dalje prisutan skoro svuda i nije se mnogo skretalo sa kursa, to ide svojim tokom stim sto su se u medjuvremnu malkice stvari izmenile koje se ticu postavljanja prevodioca i razvojnog okruzenja.
U medjuvremenu je CMake postao aktuelan koji vrlo pomaze u celoj toj prici a pojavile su se i neke sad vec standardne biblioteke poput GLFW koje barataju OpenGL-om na niskom nivou.

https://www.glfw.org

Citat:
GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platform-independent API for creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. On Linux both X11 and Wayland are supported.


Jedan konkretan milnimalisticki primer za Linux (Ubuntu 18.04) bi izgledao ovako:

Code:


## Instalacija osnovnih razvojnih komponenti
sudo apt install cmake libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev xorg-dev

## Instalacija GLFW biblioteke (prevodi i primere iz ./examples/*)
git clone https://github.com/glfw/glfw
cd glfw/
mkdir build && cd build
cmake ..
make
sudo make install

## Pokretanje primera 
cd examples
./triangle-opengl





Konkretan source-code za primer sa trouglom izgleda ovako:
Code:

//triangle-opengl.c 
//========================================================================
// OpenGL triangle example
// Copyright (c) Camilla Löwy <[email protected]>
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//    claim that you wrote the original software. If you use this software
//    in a product, an acknowledgment in the product documentation would
//    be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such, and must not
//    be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source
//    distribution.
//
//========================================================================

#include <glad/gl.h>
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>

#include "linmath.h"

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

typedef struct Vertex
{
    vec2 pos;
    vec3 col;
} Vertex;

static const Vertex vertices[3] =
{
    { { -0.6f, -0.4f }, { 1.f, 0.f, 0.f } },
    { {  0.6f, -0.4f }, { 0.f, 1.f, 0.f } },
    { {   0.f,  0.6f }, { 0.f, 0.f, 1.f } }
};

static const char* vertex_shader_text =
"#version 330\n"
"uniform mat4 MVP;\n"
"in vec3 vCol;\n"
"in vec2 vPos;\n"
"out vec3 color;\n"
"void main()\n"
"{\n"
"    gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n"
"    color = vCol;\n"
"}\n";

static const char* fragment_shader_text =
"#version 330\n"
"in vec3 color;\n"
"out vec4 fragment;\n"
"void main()\n"
"{\n"
"    fragment = vec4(color, 1.0);\n"
"}\n";

static void error_callback(int error, const char* description)
{
    fprintf(stderr, "Error: %s\n", description);
}

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GLFW_TRUE);
}

int main(void)
{
    glfwSetErrorCallback(error_callback);

    if (!glfwInit())
        exit(EXIT_FAILURE);

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow* window = glfwCreateWindow(640, 480, "OpenGL Triangle", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }

    glfwSetKeyCallback(window, key_callback);

    glfwMakeContextCurrent(window);
    gladLoadGL(glfwGetProcAddress);
    glfwSwapInterval(1);

    // NOTE: OpenGL error checks have been omitted for brevity

    GLuint vertex_buffer;
    glGenBuffers(1, &vertex_buffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    const GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL);
    glCompileShader(vertex_shader);

    const GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL);
    glCompileShader(fragment_shader);

    const GLuint program = glCreateProgram();
    glAttachShader(program, vertex_shader);
    glAttachShader(program, fragment_shader);
    glLinkProgram(program);

    const GLint mvp_location = glGetUniformLocation(program, "MVP");
    const GLint vpos_location = glGetAttribLocation(program, "vPos");
    const GLint vcol_location = glGetAttribLocation(program, "vCol");

    GLuint vertex_array;
    glGenVertexArrays(1, &vertex_array);
    glBindVertexArray(vertex_array);
    glEnableVertexAttribArray(vpos_location);
    glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE,
                          sizeof(Vertex), (void*) offsetof(Vertex, pos));
    glEnableVertexAttribArray(vcol_location);
    glVertexAttribPointer(vcol_location, 3, GL_FLOAT, GL_FALSE,
                          sizeof(Vertex), (void*) offsetof(Vertex, col));

    while (!glfwWindowShouldClose(window))
    {
        int width, height;
        glfwGetFramebufferSize(window, &width, &height);
        const float ratio = width / (float) height;

        glViewport(0, 0, width, height);
        glClear(GL_COLOR_BUFFER_BIT);

        mat4x4 m, p, mvp;
        mat4x4_identity(m);
        mat4x4_rotate_Z(m, m, (float) glfwGetTime());
        mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 1.f, -1.f);
        mat4x4_mul(mvp, p, m);

        glUseProgram(program);
        glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) &mvp);
        glBindVertexArray(vertex_array);
        glDrawArrays(GL_TRIANGLES, 0, 3);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwDestroyWindow(window);

    glfwTerminate();
    exit(EXIT_SUCCESS);
}

[ Branimir Maksimovic @ 02.02.2020. 04:03 ] @
Ja sam negde 2013, radio sa glfw u asembleru, ko mi je kriv kada mi primeri sada ne rade sa glfw 3, posto su promenili api ;)
Moracu jednom da zasednem da to prebacim ;)

ovo je main program za trougao (glfw 2):
Code:

~/.../general/red_triangle >>> cat a00.asm                                                                                                                                                                                 
format elf64

include '../../glfw.inc'
include '../../glew.inc'

section '.text' executable

public main
extrn glfwInit
extrn glfwOpenWindowHint
extrn glfwOpenWindow
extrn glfwTerminate
extrn glfwSetWindowTitle
extrn glfwEnable
extrn glewInit
extrn glewExperimental
extrn glClearColor
extrn glClear
extrn glfwSwapBuffers
extrn glfwGetKey
extrn glfwGetWindowParam
extrn glGenVertexArrays
extrn glBindVertexArray
extrn glGenBuffers
extrn glBindBuffer
extrn glBufferData
extrn glUseProgram
extrn glEnableVertexAttribArray
extrn glDisableVertexAttribArray
extrn glVertexAttribPointer
extrn glDrawArrays
extrn glDeleteBuffers
extrn glDeleteVertexArrays
extrn glDeleteProgram

extrn fprintf
extrn stderr
extrn stdout

extrn loadShaders

main:
    push rbp
    mov rbp,rsp
    sub rsp,24
    vertexArrayID equ rbp-8
    programID equ rbp-16
    vertexBuffer equ rbp-24
    
    call glfwInit
    test rax,rax
    mov rsi,errmsg1
    jz error_exit

    mov rsi,4
    mov rdi,GLFW_FSAA_SAMPLES
    call glfwOpenWindowHint

    mov rsi,3
    mov rdi,GLFW_OPENGL_VERSION_MAJOR
    call glfwOpenWindowHint

    mov rsi,3
    mov rdi,GLFW_OPENGL_VERSION_MINOR
    call glfwOpenWindowHint

    mov rsi,GLFW_OPENGL_CORE_PROFILE
    mov rdi,GLFW_OPENGL_PROFILE
    call glfwOpenWindowHint

    sub rsp,3*8
    mov qword[rsp+8*2],GLFW_WINDOW
    mov qword[rsp+8*1],0
    mov qword[rsp+8*0],32
    xor r9,r9
    xor r8,r8
    xor rcx,rcx
    xor rdx,rdx
    mov rsi,768
    mov rdi,1024
    call glfwOpenWindow
    add rsp,3*8
    mov rsi,errmsg2
    jz error_exit

    mov byte[glewExperimental],GL_TRUE
    call glewInit
    cmp rax,GLEW_OK
    mov rsi,errmsg3
    jne error_exit

    mov rdi,title
    call glfwSetWindowTitle

    mov rdi,GLFW_STICKY_KEYS
    call glfwEnable
    
    mov eax,0.4f
    xorps xmm3,xmm3
    movd xmm2,eax
    xorps xmm1,xmm1
    xorps xmm0,xmm0
    call glClearColor

    lea rsi,[vertexArrayID]
    mov rdi,1
    call glGenVertexArrays
    mov rdi,[vertexArrayID]
    call glBindVertexArray

    lea rsi,[fragment_fname]
    lea rdi,[vertex_fname]
    call loadShaders
    mov [programID],rax
    
    lea rsi,[vertexBuffer]
    mov rdi,1
    call glGenBuffers
    mov rsi,[vertexBuffer]
    mov rdi,GL_ARRAY_BUFFER
    call glBindBuffer
    mov rcx,GL_STATIC_DRAW
    mov rdx,vertex_buffer_data
    mov rsi,12*4
    mov rdi,GL_ARRAY_BUFFER
    call glBufferData
.L0:
    mov rdi,GL_COLOR_BUFFER_BIT
    call glClear

    mov rdi,[programID]
    call glUseProgram

    mov rdi,0
    call glEnableVertexAttribArray

    mov rsi,[vertexBuffer]
    mov rdi,GL_ARRAY_BUFFER
    call glBindBuffer
    
    mov r9,0
    mov r8,0
    mov rcx,GL_FALSE
    mov rdx,GL_FLOAT
    mov rsi,3
    mov rdi,0
    call glVertexAttribPointer
    
    mov rdx,3
    mov rsi,0
    mov rdi,GL_TRIANGLES
    call glDrawArrays

    mov rdi,0
    call glDisableVertexAttribArray
    
    call glfwSwapBuffers

    mov rdi,GLFW_KEY_ESC
    call glfwGetKey
    cmp rax,GLFW_PRESS
    je .L1
    mov rdi,GLFW_OPENED
    call glfwGetWindowParam
    jnz .L0
.L1:
    call glfwTerminate
    
    lea rsi,[vertexBuffer]
    mov rdi,1
    call glDeleteBuffers
    
    lea rsi,[vertexArrayID]
    mov rdi,1
    call glDeleteVertexArrays

    mov rdi,[programID]
    call glDeleteProgram

    xor eax,eax    
    mov rsp,rbp
    pop rbp
    ret

error_exit:
    xor eax,eax
    mov rdi,[stderr]
    call fprintf
    mov rax,-1
    mov rsp,rbp
    pop rbp
    ret

section '.data' writeable
errmsg1 db 'Failed to initialize glfw library.',0xa,0
errmsg2 db 'Failed to open Window.',0xa,0
errmsg3 db 'Failed to initialize glew library.',0xa,0
title db 'First Triangle',0
vertex_fname db 'SimpleVertexShader.vertexshader',0
fragment_fname db 'SimpleFragmentShader.fragmentshader',0
align 4
vertex_buffer_data dd -1.0f, -1.0f, 0.0f
           dd  1.0f, -1.0f, 0.0f
           dd 0.0f,  1.0f, 0.0f



[Ovu poruku je menjao Branimir Maksimovic dana 02.02.2020. u 05:36 GMT+1]