[LordPakus] Arnow2D. Como crear una ventana sin GLUT.

86 views
Skip to first unread message

Pako

unread,
Feb 12, 2012, 7:04:32 PM2/12/12
to lpgame...@googlegroups.com
Hola a todos...

Antes que nada mis disculpas por estar tanto tiempo sin escribir, pero entre la gripe y la vida personal me ha sido complicado escribir antes....

El capitulo de hoy tratará de algo tan sencillo como crear una ventana de windows (que luego nos servirá de base para el resto del proyecto). Esto ya lo hicimos en su momento aquí , pero como ya dije en su momento, no me gusta mucho usar glut, así que esta vez lo haremos usando la API de windows directamente (lo siento por los linuxeros, si hay algún voluntario para hacer el código en linux lo colgaré gustosamente).

Realmente en este capitulo he hecho poco, sencillamente copiar el capitulo 1 de nehe y reorganizarlo un poco... Veréis que poco a poco este código lo iré transformando hasta que el parecido con el principio sea mínimo pero haciendo lo que nosotros queremos que haga.

Espero que os guste:

main.cpp

#include "Arnow2D.h"

HDC hDC=NULL; // Private GDI Device Context
HGLRC hRC=NULL; // Permanent Rendering Context
HWND hWnd=NULL; // Holds Our Window Handle
HINSTANCE hInstance; // Holds The Instance Of The Application

bool active=TRUE; // Window Active Flag Set To TRUE By Default
bool fullscreen=TRUE; // Fullscreen Flag Set To Fullscreen Mode By Default
bool keys[256]; // Array Used For The Keyboard Routine

int WINAPI WinMain( HINSTANCE hInstance, // Instance
HINSTANCE hPrevInstance, // Previous Instance
LPSTR lpCmdLine, // Command Line Parameters
int nCmdShow) // Window Show State
{
MSG msg; // Windows Message Structure
BOOL done=FALSE; // Bool Variable To Exit Loop

// Ask The User Which Screen Mode They Prefer
if (MessageBox(NULL,"Quieres ejecutar en modo fullscreen?", "FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
{
fullscreen=FALSE; // Windowed Mode
}

// Create Our OpenGL Window
if (!CreateGLWindow("Arnow2D",640,480,16,fullscreen))
{
return 0; // Quit If Window Was Not Created
}

while(!done) // Loop That Runs While done=FALSE
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
{
if (msg.message==WM_QUIT) // Have We Received A Quit Message?
{
done=TRUE; // If So done=TRUE
}
else // If Not, Deal With Window Messages
{
TranslateMessage(&msg); // Translate The Message
DispatchMessage(&msg); // Dispatch The Message
}
}
else // If There Are No Messages
{
// Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
if (active) // Program Active?
{
if (keys[VK_ESCAPE]) // Was ESC Pressed?
{
done=TRUE; // ESC Signalled A Quit
}
else // Not Time To Quit, Update Screen
{
DrawGLScene(); // Draw The Scene
SwapBuffers(hDC); // Swap Buffers (Double Buffering)
}
}

if (keys[VK_F1]) // Is F1 Being Pressed?
{
keys[VK_F1]=FALSE; // If So Make Key FALSE
KillGLWindow(); // Kill Our Current Window
fullscreen=!fullscreen; // Toggle Fullscreen / Windowed Mode
// Recreate Our OpenGL Window
if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))
{
return 0; // Quit If Window Was Not Created
}
}
}
}

// Shutdown
KillGLWindow(); // Kill The Window
return (msg.wParam); // Exit The Program
}

Arnow2D.cpp

#include "Arnow2D.h"

extern HDC hDC; // Private GDI Device Context
extern HGLRC hRC; // Permanent Rendering Context
extern HWND    hWnd; // Holds Our Window Handle
extern HINSTANCE hInstance; // Holds The Instance Of The Application

extern bool active; // Window Active Flag Set To TRUE By Default
extern bool fullscreen; // Fullscreen Flag Set To Fullscreen Mode By Default
extern bool keys[256]; // Array Used For The Keyboard Routine

GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Resize And Initialize The GL Window
{
if (height==0) // Prevent A Divide By Zero By
{
height=1; // Making Height Equal One
}

glViewport(0,0,width,height); // Reset The Current Viewport

glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix

glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
}

int InitGL(GLvoid) // All Setup For OpenGL Goes Here
{
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
return TRUE; // Initialization Went OK
}

int DrawGLScene(GLvoid) // Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glLoadIdentity(); // Reset The Current Modelview Matrix
return TRUE; // Everything Went OK
}

GLvoid KillGLWindow(GLvoid) // Properly Kill The Window
{
if (fullscreen) // Are We In Fullscreen Mode?
{
ChangeDisplaySettings(NULL,0); // If So Switch Back To The Desktop
ShowCursor(TRUE); // Show Mouse Pointer
}

if (hRC) // Do We Have A Rendering Context?
{
if (!wglMakeCurrent(NULL,NULL)) // Are We Able To Release The DC And RC Contexts?
{
MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}

if (!wglDeleteContext(hRC)) // Are We Able To Delete The RC?
{
MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
hRC=NULL; // Set RC To NULL
}

if (hDC && !ReleaseDC(hWnd,hDC)) // Are We Able To Release The DC
{
MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hDC=NULL; // Set DC To NULL
}

if (hWnd && !DestroyWindow(hWnd)) // Are We Able To Destroy The Window?
{
MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hWnd=NULL; // Set hWnd To NULL
}

if (!UnregisterClass("OpenGL",hInstance)) // Are We Able To Unregister Class
{
MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hInstance=NULL; // Set hInstance To NULL
}
}

/* This Code Creates Our OpenGL Window.  Parameters Are: *
 * title - Title To Appear At The Top Of The Window *
 * width - Width Of The GL Window Or Fullscreen Mode *
 * height - Height Of The GL Window Or Fullscreen Mode *
 * bits - Number Of Bits To Use For Color (8/16/24/32) *
 * fullscreenflag - Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE) */

BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
GLuint PixelFormat; // Holds The Results After Searching For A Match
WNDCLASS wc; // Windows Class Structure
DWORD dwExStyle; // Window Extended Style
DWORD dwStyle; // Window Style
RECT WindowRect; // Grabs Rectangle Upper Left / Lower Right Values
WindowRect.left=(long)0; // Set Left Value To 0
WindowRect.right=(long)width; // Set Right Value To Requested Width
WindowRect.top=(long)0; // Set Top Value To 0
WindowRect.bottom=(long)height; // Set Bottom Value To Requested Height

fullscreen=fullscreenflag; // Set The Global Fullscreen Flag

hInstance = GetModuleHandle(NULL); // Grab An Instance For Our Window
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // Redraw On Size, And Own DC For Window.
wc.lpfnWndProc = (WNDPROC) WndProc; // WndProc Handles Messages
wc.cbClsExtra = 0; // No Extra Window Data
wc.cbWndExtra = 0; // No Extra Window Data
wc.hInstance = hInstance; // Set The Instance
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Load The Default Icon
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Load The Arrow Pointer
wc.hbrBackground = NULL; // No Background Required For GL
wc.lpszMenuName = NULL; // We Don't Want A Menu
wc.lpszClassName = "OpenGL"; // Set The Class Name

if (!RegisterClass(&wc)) // Attempt To Register The Window Class
{
MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // Return FALSE
}

if (fullscreen) // Attempt Fullscreen Mode?
{
DEVMODE dmScreenSettings; // Device Mode
memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared
dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Size Of The Devmode Structure
dmScreenSettings.dmPelsWidth = width; // Selected Screen Width
dmScreenSettings.dmPelsHeight = height; // Selected Screen Height
dmScreenSettings.dmBitsPerPel = bits; // Selected Bits Per Pixel
dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

// Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.
if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
{
// If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.
if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
{
fullscreen=FALSE; // Windowed Mode Selected.  Fullscreen = FALSE
}
else
{
// Pop Up A Message Box Letting User Know The Program Is Closing.
MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
return FALSE; // Return FALSE
}
}
}

if (fullscreen) // Are We Still In Fullscreen Mode?
{
dwExStyle=WS_EX_APPWINDOW; // Window Extended Style
dwStyle=WS_POPUP; // Windows Style
ShowCursor(FALSE); // Hide Mouse Pointer
}
else
{
dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; // Window Extended Style
dwStyle=WS_OVERLAPPEDWINDOW; // Windows Style
}

AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle); // Adjust Window To True Requested Size

// Create The Window
if (!(hWnd=CreateWindowEx( dwExStyle, // Extended Style For The Window
"OpenGL", // Class Name
title, // Window Title
dwStyle | // Defined Window Style
WS_CLIPSIBLINGS | // Required Window Style
WS_CLIPCHILDREN, // Required Window Style
0, 0, // Window Position
WindowRect.right-WindowRect.left, // Calculate Window Width
WindowRect.bottom-WindowRect.top, // Calculate Window Height
NULL, // No Parent Window
NULL, // No Menu
hInstance, // Instance
NULL))) // Dont Pass Anything To WM_CREATE
{
KillGLWindow(); // Reset The Display
MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // Return FALSE
}

static PIXELFORMATDESCRIPTOR pfd= // pfd Tells Windows How We Want Things To Be
{
sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor
1, // Version Number
PFD_DRAW_TO_WINDOW | // Format Must Support Window
PFD_SUPPORT_OPENGL | // Format Must Support OpenGL
PFD_DOUBLEBUFFER, // Must Support Double Buffering
PFD_TYPE_RGBA, // Request An RGBA Format
bits, // Select Our Color Depth
0, 0, 0, 0, 0, 0, // Color Bits Ignored
0, // No Alpha Buffer
0, // Shift Bit Ignored
0, // No Accumulation Buffer
0, 0, 0, 0, // Accumulation Bits Ignored
16, // 16Bit Z-Buffer (Depth Buffer)
0, // No Stencil Buffer
0, // No Auxiliary Buffer
PFD_MAIN_PLANE, // Main Drawing Layer
0, // Reserved
0, 0, 0 // Layer Masks Ignored
};

if (!(hDC=GetDC(hWnd))) // Did We Get A Device Context?
{
KillGLWindow(); // Reset The Display
MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // Return FALSE
}

if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) // Did Windows Find A Matching Pixel Format?
{
KillGLWindow(); // Reset The Display
MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // Return FALSE
}

if(!SetPixelFormat(hDC,PixelFormat,&pfd)) // Are We Able To Set The Pixel Format?
{
KillGLWindow(); // Reset The Display
MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // Return FALSE
}

if (!(hRC=wglCreateContext(hDC))) // Are We Able To Get A Rendering Context?
{
KillGLWindow(); // Reset The Display
MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // Return FALSE
}

if(!wglMakeCurrent(hDC,hRC)) // Try To Activate The Rendering Context
{
KillGLWindow(); // Reset The Display
MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // Return FALSE
}

ShowWindow(hWnd,SW_SHOW); // Show The Window
SetForegroundWindow(hWnd); // Slightly Higher Priority
SetFocus(hWnd); // Sets Keyboard Focus To The Window
ReSizeGLScene(width, height); // Set Up Our Perspective GL Screen

if (!InitGL()) // Initialize Our Newly Created GL Window
{
KillGLWindow(); // Reset The Display
MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return FALSE; // Return FALSE
}

return TRUE; // Success
}

LRESULT CALLBACK WndProc( HWND hWnd, // Handle For This Window
UINT uMsg, // Message For This Window
WPARAM wParam, // Additional Message Information
LPARAM lParam) // Additional Message Information
{
switch (uMsg) // Check For Windows Messages
{
case WM_ACTIVATE: // Watch For Window Activate Message
{
if (!HIWORD(wParam)) // Check Minimization State
{
active=TRUE; // Program Is Active
}
else
{
active=FALSE; // Program Is No Longer Active
}

return 0; // Return To The Message Loop
}

case WM_SYSCOMMAND: // Intercept System Commands
{
switch (wParam) // Check System Calls
{
case SC_SCREENSAVE: // Screensaver Trying To Start?
case SC_MONITORPOWER: // Monitor Trying To Enter Powersave?
return 0; // Prevent From Happening
}
break; // Exit
}

case WM_CLOSE: // Did We Receive A Close Message?
{
PostQuitMessage(0); // Send A Quit Message
return 0; // Jump Back
}

case WM_KEYDOWN: // Is A Key Being Held Down?
{
keys[wParam] = TRUE; // If So, Mark It As TRUE
return 0; // Jump Back
}

case WM_KEYUP: // Has A Key Been Released?
{
keys[wParam] = FALSE; // If So, Mark It As FALSE
return 0; // Jump Back
}

case WM_SIZE: // Resize The OpenGL Window
{
ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Height
return 0; // Jump Back
}
}

// Pass All Unhandled Messages To DefWindowProc
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

Arnow2D.h:


#include <windows.h> // Header File For Windows
#include <gl\gl.h> // Header File For The OpenGL32 Library

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration For WndProc
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag);
GLvoid KillGLWindow(GLvoid);
int DrawGLScene(GLvoid) ;
int InitGL(GLvoid);
GLvoid ReSizeGLScene(GLsizei width, GLsizei height) ;



Poco a poco lo iré remodelando y ampliando. A ver si mañana puedo poner los archivos en algún servidor para que os descargeis directamente el proyecto.

Que lo disfruteis

Nos vemos

--
Publicado por Pako para LordPakus el 2/12/2012 04:04:00 PM

Ferran Ferri

unread,
Feb 13, 2012, 4:22:43 AM2/13/12
to lpgame...@googlegroups.com
Es un poco dificil seguir el codigo si no esta formateado. Por que no usas una libreria tipo GLFW para gestionar ventanas? Al menos asi reducirias cierta complejidad...
  Killrazor

Pako

unread,
Feb 13, 2012, 2:18:52 PM2/13/12
to LPGameEngine
Me lo estube planteando kill.. pero al final nada.. todo este código
al final lo pondré dentro del motor, de forma que el usuario final no
se enterará de nada: crear ventana, pintar gráfico, renderizar y poco
más.

A ver como me queda.

Nos vemos

On 13 feb, 10:22, Ferran Ferri <ferranfe...@gmail.com> wrote:
> Es un poco dificil seguir el codigo si no esta formateado. Por que no usas
> una libreria tipo GLFW para gestionar ventanas? Al menos asi reducirias
> cierta complejidad...
>   Killrazor
>
>
>
>
>
>
>
> On Mon, Feb 13, 2012 at 1:04 AM, Pako <fbor2...@gmail.com> wrote:
> > Hola a todos...
>
> > Antes que nada mis disculpas por estar tanto tiempo sin escribir, pero
> > entre la gripe y la vida personal me ha sido complicado escribir antes....
>
> > El capitulo de hoy tratará de algo tan sencillo como crear una ventana de
> > windows (que luego nos servirá de base para el resto del proyecto). Esto ya
> > lo hicimos en su momento aquí<http://lordpakus.blogspot.com/2011/05/gameengine-capitulo-2.html> ,
> > pero como ya dije en su momento, no me gusta mucho usar glut, así que esta
> > vez lo haremos usando la API de windows directamente (lo siento por los
> > linuxeros, si hay algún voluntario para hacer el código en linux lo colgaré
> > gustosamente).
>
> > Realmente en este capitulo he hecho poco, sencillamente copiar el capitulo
> > 1 de nehe<http://nehe.gamedev.net/tutorial/creating_an_opengl_window_(win32)/13...> y
> > reorganizarlo un poco... Veréis que poco a poco este código lo iré
> > transformando hasta que el parecido con el principio sea mínimo pero
> > haciendo lo que nosotros queremos que haga.
>
> > Espero que os guste:
>
> > *main.cpp*
> > *Arnow2D.cpp*
> ...
>
> leer más »

StrongCod3r

unread,
Feb 13, 2012, 6:14:18 PM2/13/12
to lpgame...@googlegroups.com
No es por joder, pero recomiendo no reinventar la rueda a menos que quiera programar un super engine y sacarle el zumo a todo(como John Carmarck). Yo recomiendo que uses alguna libreria base y a librarte el problema de solucionar q si la ventana, imagen o que si no funciona en linux y demas, centrarse en el engine(si esque no has cambiado de opinion)

Como ya te habia platicado te recomiendo usar allegro(sdl no ta muy quemada ya esa) y darle soporte OpenGL, ademas de la ventaja q soporta como mas de 5 plataformas.

Ojo, no digo q este codigo q has escrito este mal ni nada, es bueno conocer como se hacen las cosas y saber de todo.

Saludos.
.:SC:.

2012/2/13 Pako <fbor...@gmail.com>



--
Saludos.
StrongCod3r.

Pako

unread,
Feb 13, 2012, 6:34:38 PM2/13/12
to LPGameEngine
Buenas Strong.

Reinventar la rueda a veces puede ir bien como método didáctico (o eso
creo yo), y no obviamente no voy ha hacer un supermegaengine (ya me
gustaria :D)

El tutorial en un principio lo pensé para hacerlo precisamente sobre
SDL o Allegro, orientado a todos aquellos que les había gustado el
LPEngine pero que no tenían los suficientes conocimientos para seguir
el curso.

El problema que vi es que installar SDL o Allegro (a parte de que
están bastante desactualizadas ambas) era bastante complicadillo para
alguien con poca experiencia, así que decidí montarlo todo desde el
prinicpio, pero muy muy sencillito.

Si al final del curso puedo conseguir un libreria/motor gráfico
sencillo que la gente pueda usar para sus juegos cutres de ir por casa
yo ya me doy por contento.

En fin, espero que te haya convencido la explicación

Nos vemos xavalote!!

On 14 feb, 00:14, StrongCod3r <strong.co...@gmail.com> wrote:
> No es por joder, pero recomiendo no reinventar la rueda a menos que quiera
> programar un super engine y sacarle el zumo a todo(como John Carmarck). Yo
> recomiendo que uses alguna libreria base y a librarte el problema de
> solucionar q si la ventana, imagen o que si no funciona en linux y demas,
> centrarse en el engine(si esque no has cambiado de opinion)
>
> Como ya te habia platicado te recomiendo usar allegro(sdl no ta muy quemada
> ya esa) y darle soporte OpenGL, ademas de la ventaja q soporta como mas de
> 5 plataformas.
>
> Ojo, no digo q este codigo q has escrito este mal ni nada, es bueno conocer
> como se hacen las cosas y saber de todo.
>
> Saludos.
> .:SC:.
>
> 2012/2/13 Pako <fbor2...@gmail.com>
> ...
>
> leer más »

StrongCod3r

unread,
Feb 13, 2012, 6:53:25 PM2/13/12
to lpgame...@googlegroups.com
Lo de instalar SDL o Allegro la verdad si quieres te colaboro con un tutorial de como instalarlo en VS2010, la verdad es muy sencillo. Lo de que SDL y Allegro esta desactualizado, en eso no concuerdo, ya que SDL esta por la versión 1.3 creo, pero se a vuelto un tema de negocio ya(pagar pasta si quieres venderlo y demas), Yo recomiendo Allegro la verdad ya va en su version 5.5 y en la web ofrece los compilados estatico dinamicos monoliticos etc, ya sea para VS2010 o Mingw(linux, windows mac y demas), en estos meses ya han sacado 2 updates, asi que creo que es la que mas mantenimiento le estan dando, ademas de tener una documentacion para dummies :D, en fin almenos yo les invito a probarla.


Saludos.
.:SC:. 

2012/2/14 Pako <fbor...@gmail.com>



--
Saludos.
StrongCod3r.

Ferran Ferri

unread,
Feb 14, 2012, 4:04:54 AM2/14/12
to lpgame...@googlegroups.com
Yo creo que la cuestion es definir "complicado" por que a la vez estas definiendo a tu publico objetivo (a tu target, vaya). La cuestion es que para evitar explicar como se usa una libreria (SDL solo necesita eso, igual que GLFW), metes el código de una inicializacion de win32, donde ademas inicializas openGL "a la antigua", sin crear un contexto GL que soporte por ejemplo opengl 3.3. Como solucionaras las carga de imagenes? Tambien sin librerias?

Yo siempre he pensado que si alguien no sabe colocar una librería en su IDE (o en el PATH de su toolchain), es que no sabe suficiente de programación y por tanto to tiene nada que hacer en un tutorial de hacer motores graficos (de hecho ni siquiera en uno de usar motores graficos). 

  Killrazor



2012/2/14 StrongCod3r <strong...@gmail.com>

Pako

unread,
Feb 14, 2012, 5:55:54 PM2/14/12
to LPGameEngine
Te tomo la palabra Strong.... cuando te veas con tiempo y ganas para
hacer un manual para dummies de allegro pasamelo y te lo publico sin
problemas, yo sinceramente no me vi con coraje de hacerlo sencillo.

Gracias por el ofrecimiento xavalote!!

On 14 feb, 00:53, StrongCod3r <strong.co...@gmail.com> wrote:
> Lo de instalar SDL o Allegro la verdad si quieres te colaboro con un
> tutorial de como instalarlo en VS2010, la verdad es muy sencillo. Lo de que
> SDL y Allegro esta desactualizado, en eso no concuerdo, ya que SDL esta por
> la versión 1.3 creo, pero se a vuelto un tema de negocio ya(pagar pasta si
> quieres venderlo y demas), Yo recomiendo Allegro la verdad ya va en su
> version 5.5 y en la web ofrece los compilados estatico dinamicos
> monoliticos etc, ya sea para VS2010 o Mingw(linux, windows mac y demas), en
> estos meses ya han sacado 2 updates, asi que creo que es la que mas
> mantenimiento le estan dando, ademas de tener una documentacion para
> dummies :D, en fin almenos yo les invito a probarla.
>
> http://www.allegro.cc/files/
>
> Saludos.
> .:SC:.
>
> 2012/2/14 Pako <fbor2...@gmail.com>
> ...
>
> leer más »

Pako

unread,
Feb 14, 2012, 6:05:16 PM2/14/12
to LPGameEngine
Es complicado Kill...justamente por lo que tu dices.

Es cierto que una persona que no sabe linkar librerias no deberia
ponerse en los berenjenales de un motor gráfico , pero yo soy del
parecer que aprender se consigue trabajando. Si "capas" el
aprendizaje autodidacta de una persona por una cosa en principio no
demasiado intuitiva para un profano como puede ser el linkado de
librerias tampoco creo que sea una buena solución.

Dicho de otra manera... soy del parecer que es mejor darle a la
comunidad todo un poco masticadito para que pierdan el miedo inicial a
ponerse con un tema y luego , si les gusta ese tema, ya se buscarán
maneras más profesionales y serias de hacer las cosas.

No se Kill, al final es un tema personal de como vemos cada uno como
abordar un mismo problema y no creo que ni uno ni otro tengamos (toda)
la razón.

Nos vemos

Pako



On 14 feb, 10:04, Ferran Ferri <ferranfe...@gmail.com> wrote:
> Yo creo que la cuestion es definir "complicado" por que a la vez estas
> definiendo a tu publico objetivo (a tu target, vaya). La cuestion es que
> para evitar explicar como se usa una libreria (SDL solo necesita eso, igual
> que GLFW), metes el código de una inicializacion de win32, donde ademas
> inicializas openGL "a la antigua", sin crear un contexto GL que soporte por
> ejemplo opengl 3.3. Como solucionaras las carga de imagenes? Tambien sin
> librerias?
>
> Yo siempre he pensado que si alguien no sabe colocar una librería en su IDE
> (o en el PATH de su toolchain), es que no sabe suficiente de programación y
> por tanto to tiene nada que hacer en un tutorial de hacer motores graficos
> (de hecho ni siquiera en uno de usar motores graficos).
>
>   Killrazor
>
> 2012/2/14 StrongCod3r <strong.co...@gmail.com>
>
>
>
>
>
>
>
> > Lo de instalar SDL o Allegro la verdad si quieres te colaboro con un
> > tutorial de como instalarlo en VS2010, la verdad es muy sencillo. Lo de que
> > SDL y Allegro esta desactualizado, en eso no concuerdo, ya que SDL esta por
> > la versión 1.3 creo, pero se a vuelto un tema de negocio ya(pagar pasta si
> > quieres venderlo y demas), Yo recomiendo Allegro la verdad ya va en su
> > version 5.5 y en la web ofrece los compilados estatico dinamicos
> > monoliticos etc, ya sea para VS2010 o Mingw(linux, windows mac y demas), en
> > estos meses ya han sacado 2 updates, asi que creo que es la que mas
> > mantenimiento le estan dando, ademas de tener una documentacion para
> > dummies :D, en fin almenos yo les invito a probarla.
>
> >http://www.allegro.cc/files/
>
> > Saludos.
> > .:SC:.
>
> > 2012/2/14 Pako <fbor2...@gmail.com>
> ...
>
> leer más »

Ferran Ferri

unread,
Feb 15, 2012, 5:18:10 AM2/15/12
to lpgame...@googlegroups.com
Para mi el tema importante es cuando hablas de "capar" el aprendizaje con librerias, pero despues hablas de todo masticadito. Que las librerias existen es una cosa que cualquiera que haya programado un "hello world" deberia saber. Pero segun tú dar una inicializacion en win32 es una cosa masticada? No seria mejor  hacerlo primero con GLUT y despues enseñar que detras hay un codigo win32?

Y si no quieres liar a la comunidad con el link de librerias, que vas a hacer con opengl32.lib? Vas a picar tu propia version de GL? Y la de GLU? Por que en principio para tu segundo tutorial (a mucho tardar), ya deberias linkar con esta libreria. Casi seria mas logico enseñar a alguien a usar e incluso a crear una lib para que pierda el miedo, pero como tu dices es una cuestion de opinion :)

  Killrazor



2012/2/15 Pako <fbor...@gmail.com>
Reply all
Reply to author
Forward
0 new messages