|
[ 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 `__glutInitWithExit@12'
[Linker error] undefined reference to `__glutCreateWindowWithExit@8'
[Linker error] undefined reference to `__glutCreateMenuWithExit@8'
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]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|