elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Ayuda) Entender un código
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Ayuda) Entender un código  (Leído 2,249 veces)
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
(Ayuda) Entender un código
« en: 6 Diciembre 2014, 00:33 am »

Hola, ¡muy buenas forer@s! Hoy os traigo una duda un tanto elemental, es decir, bastante básica a mi parecer.

Me preguntaba si alguien tendría la amabilidad de explicarme este código. He de decir que ando muy perdido en cuanto a librerías en C++, puesto que he pasado de programar con iostream a programar con la API de Windows y OpenGL. Bueno, aquí os dejo el código (me podéis explicar, si queréis, siendo técnicos, para que tengáis que escribir menos):

Código
  1. bool CShader::loadShader(string sFile, int a_iType)
  2. {
  3.   FILE* fp = fopen(sFile.c_str(), "rt");
  4.   if(!fp)return false;
  5.  
  6.   // Get all lines from a file
  7.  
  8.   vector<string> sLines;
  9.   char sLine[255];
  10.   while(fgets(sLine, 255, fp))sLines.push_back(sLine);
  11.   fclose(fp);
  12.  
  13.   const char** sProgram = new const char*[ESZ(sLines)];
  14.   FOR(i, ESZ(sLines))sProgram[i] = sLines[i].c_str();
  15.  
  16.   uiShader = glCreateShader(a_iType);
  17.  
  18.   glShaderSource(uiShader, ESZ(sLines), sProgram, NULL);
  19.   glCompileShader(uiShader);
  20.  
  21.   delete[] sProgram;
  22.  
  23.   int iCompilationStatus;
  24.   glGetShaderiv(uiShader, GL_COMPILE_STATUS, &iCompilationStatus);
  25.  
  26.   if(iCompilationStatus == GL_FALSE)return false;
  27.   iType = a_iType;
  28.   bLoaded = true;
  29.  
  30.   return 1;
  31. }

Notas:
* No hace falta que me expliqueis esto: uiShader = glCreateShader(a_iType), esto: glShaderSource(uiShader, ESZ(sLines), sProgram, NULL); ni esto: glCompileShader(uiShader);

* Explicad solo lo que sepais, y así todos podrán ayudar y nadie se confundirá ;)

¡MUCHAS GRACIAS POR SU ATENCIÓN Y POR SU AYUDA!


En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
leobr6

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: (Ayuda) Entender un código
« Respuesta #1 en: 6 Diciembre 2014, 15:34 pm »

En lo que respecta a la primera parte del programa:

Código
  1. bool CShader::loadShader(string sFile, int a_iType)
  2. {
  3.   FILE* fp = fopen(sFile.c_str(), "rt"); /* Abre el archivo sFile para lectura (la "t" se usa para explicitar que es "texto", es un modificador adicional, que depende de la implementacion de la funcion fopen, es decir, puede ser valido como no, o ignorado -corrijanme si me equivoco-) */
  4.   if(!fp)return false;    /* Si no pudo abrir el archivo, retorna false */
  5.  
  6.   // Get all lines from a file
  7.  
  8.   vector<string> sLines;
  9.   char sLine[255];
  10.   /* La expresion que se evalua en el while obtiene las lineas desde el archivo (fp) de a 255 caracteres copiando en el arreglo de char 'sLine'. Cuando encuentra EOF (o error) retorna. */
  11.   while(fgets(sLine, 255, fp))
  12.           sLines.push_back(sLine);  /* En el cuerpo del while, en cada iteracion agrega un elemento al vector de strings 'sLines'*/
  13.   fclose(fp);    /* Cierra el archivo sFile */
  14.  
  15.   const char** sProgram = new const char*[ESZ(sLines)]; /* Crea sProgram para almacenar el vector de strings como un arreglo de char* */
  16.   FOR(i, ESZ(sLines))sProgram[i] = sLines[i].c_str(); /* Convierte cada string del vector a un string de c (char*) y lo almacena en sProgram */
  17.  
  18.   uiShader = glCreateShader(a_iType);
  19.  
  20.   glShaderSource(uiShader, ESZ(sLines), sProgram, NULL);
  21.   glCompileShader(uiShader);
  22.  
  23.   delete[] sProgram; /* Elimina el arreglo de chars sProgram */
  24.  
  25.   int iCompilationStatus;
  26.   glGetShaderiv(uiShader, GL_COMPILE_STATUS, &iCompilationStatus);
  27.  
  28.   if(iCompilationStatus == GL_FALSE)return false;
  29.   iType = a_iType;
  30.   bLoaded = true;
  31.  
  32.   return 1;
  33. }
  34.  

Saludos


En línea

Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: (Ayuda) Entender un código
« Respuesta #2 en: 6 Diciembre 2014, 17:05 pm »

¡Muchas gracias! Creo que ya lo entiendo :D
En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con codigo para entender
Ingeniería Inversa
DragonsWP 1 2,755 Último mensaje 31 Diciembre 2009, 09:47 am
por MCKSys Argentina
ayuda con codigo para entender ASM (DIsculpa por el doble espot )
ASM
DragonsWP 4 4,455 Último mensaje 26 Enero 2010, 08:32 am
por Eternal Idol
[ActionScript] Ayuda para entender codigo
Programación General
Sancho.Mazorka 0 2,188 Último mensaje 1 Noviembre 2010, 03:36 am
por Sancho.Mazorka
[AYUDA] Necesito entender el código - C++
Programación C/C++
Alape04 1 1,693 Último mensaje 21 Octubre 2016, 05:27 am
por palacio29
Ayuda a entender este código
Programación C/C++
Bastiannjs 1 2,286 Último mensaje 7 Septiembre 2017, 20:11 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines