Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
José Pardo Madera
/
pag_practicas_2025
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
2574e379
authored
Sep 25, 2025
by
José Pardo Madera
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Apartado 2 practica 3: Comprobación de errores
parent
420348d3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
83 additions
and
7 deletions
renderer.cpp
renderer.cpp
View file @
2574e379
...
...
@@ -6,6 +6,69 @@
#include "ventana_color.h"
/// Helper que compila un shader imprimiendo mensajes de error en el log
/// @return true si la compilación ha sido correcta, false en otro caso
static
bool
compilarShader
(
GLuint
shaderHandler
,
std
::
string
nombre_shader
,
std
::
string
&
codigo_shader
)
{
const
GLchar
*
fuente
=
codigo_shader
.
c_str
();
glShaderSource
(
shaderHandler
,
1
,
&
fuente
,
nullptr
);
glCompileShader
(
shaderHandler
);
GLint
compileResult
;
glGetShaderiv
(
shaderHandler
,
GL_COMPILE_STATUS
,
&
compileResult
);
if
(
compileResult
==
GL_FALSE
)
{
PAG
::
log
<<
"No se pudo compilar shader
\"
"
<<
nombre_shader
<<
"
\"
"
<<
std
::
endl
;
GLint
logLen
=
0
;
glGetShaderiv
(
shaderHandler
,
GL_INFO_LOG_LENGTH
,
&
logLen
);
if
(
logLen
>
0
)
{
char
*
cLogString
=
new
char
[
logLen
];
glGetShaderInfoLog
(
shaderHandler
,
logLen
,
nullptr
,
cLogString
);
std
::
string
logString
(
cLogString
);
delete
[]
cLogString
;
PAG
::
log
<<
logString
<<
std
::
endl
;
}
else
{
PAG
::
log
<<
"Log de compilación vacio"
<<
std
::
endl
;
}
return
false
;
}
return
true
;
}
/// Helper que enlaza un programa imprimiendo mensajes de error en el log
/// @return true si el enlaze ha sido correcto, false en otro caso
static
bool
enlazarPrograma
(
GLuint
programHandler
)
{
glLinkProgram
(
programHandler
);
GLint
linkSuccess
=
0
;
glGetProgramiv
(
programHandler
,
GL_LINK_STATUS
,
&
linkSuccess
);
if
(
linkSuccess
==
GL_FALSE
)
{
PAG
::
log
<<
"No se pudo enlazar programa shader"
<<
std
::
endl
;
GLint
logLen
=
0
;
glGetProgramiv
(
programHandler
,
GL_INFO_LOG_LENGTH
,
&
logLen
);
if
(
logLen
>
0
)
{
char
*
cLogString
=
new
char
[
logLen
];
glGetProgramInfoLog
(
programHandler
,
logLen
,
nullptr
,
cLogString
);
std
::
string
logString
(
cLogString
);
delete
[]
cLogString
;
PAG
::
log
<<
logString
<<
std
::
endl
;
}
else
{
PAG
::
log
<<
"Log de compilación vacio"
<<
std
::
endl
;
}
return
false
;
}
return
true
;
}
namespace
PAG
{
// Basado en https://stackoverflow.com/a/1008289
Renderer
&
Renderer
::
getInstance
()
{
...
...
@@ -78,19 +141,32 @@ namespace PAG {
"}
\n
"
;
idVS
=
glCreateShader
(
GL_VERTEX_SHADER
);
const
GLchar
*
fuenteVS
=
miVertexShader
.
c_str
();
glShaderSource
(
idVS
,
1
,
&
fuenteVS
,
nullptr
);
glCompileShader
(
idVS
);
if
(
idVS
==
0
)
{
PAG
::
log
<<
"No se pudo crear vertex shader."
<<
std
::
endl
;
return
;
}
if
(
!
compilarShader
(
idVS
,
"vertex-shader"
,
miVertexShader
))
{
return
;
}
idFS
=
glCreateShader
(
GL_FRAGMENT_SHADER
);
const
GLchar
*
fuenteFS
=
miFragmentShader
.
c_str
();
glShaderSource
(
idFS
,
1
,
&
fuenteFS
,
nullptr
);
glCompileShader
(
idFS
);
if
(
idFS
==
0
)
{
PAG
::
log
<<
"No se pudo crear fragment shader"
<<
std
::
endl
;
return
;
}
if
(
!
compilarShader
(
idFS
,
"fragment-shader"
,
miFragmentShader
))
{
return
;
}
idSP
=
glCreateProgram
();
if
(
idSP
==
0
)
{
PAG
::
log
<<
"No se pudo crear programa shader"
<<
std
::
endl
;
return
;
}
glAttachShader
(
idSP
,
idVS
);
glAttachShader
(
idSP
,
idFS
);
glLinkProgram
(
idSP
);
enlazarPrograma
(
idSP
);
}
void
Renderer
::
creaModelo
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment