const char / const charGL / char / string ?
Bonjour !
j'essaye d'écrire une classe pour créer des objets openGL et je buttes sur la gestion des chars pour les shaders.
par la suite il faudra que je crées un module dans le programme pour éditer les shaders.
d'où une première vraie question: utiliser les char, ou utiliser les string pour cet éditeur de texte à fabriquer ? si c'est du string, je suppose qu il faudra utiliser c.str() pour le convertir ?
deuxième question, plus à voir avec le C++, je n'arrive pas à placer mon texte en char,
j'ai en retour compilateur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
In file included from C:\redKAT\REDKAT\main_redKAT.cpp:23:0:
..\REDKAT/Surfaces.cpp: In member function 'void Surfaces::fill_shader_code(char*, GLenum)':
..\REDKAT/Surfaces.cpp:87:48: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
sprintf(m_vertex_shader_code,shadercode);
^
In file included from ..\REDKAT/utility_log.cpp:2:0,
from C:\redKAT\REDKAT\main_redKAT.cpp:21:
c:\mingw\include\stdio.h:280:37: error: initializing argument 1 of 'int sprintf(char*, const char*, ...)' [-fpermissive]
_CRTIMP int __cdecl __MINGW_NOTHROW sprintf (char*, const char*, ...);
^
In file included from C:\redKAT\REDKAT\main_redKAT.cpp:23:0:
..\REDKAT/Surfaces.cpp:90:50: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
sprintf(m_fragment_shader_code,shadercode);
^
In file included from ..\REDKAT/utility_log.cpp:2:0,
from C:\redKAT\REDKAT\main_redKAT.cpp:21:
c:\mingw\include\stdio.h:280:37: error: initializing argument 1 of 'int sprintf(char*, const char*, ...)' [-fpermissive]
_CRTIMP int __cdecl __MINGW_NOTHROW sprintf (char*, const char*, ...); |
J'en déduis que je ne comprends pas trop la différence char et const char, et ce qu'il faut que je fasse.
Voilà le .hpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
class Surfaces
{
public://fonction membres allias méthodes
void fill_shader_code(char *shadercode, GLenum shader_type);//remplissage du string du shader
void init_shaders();//creation des vertex et fragment shaders
void compile_attach_shaders();
void create_program();
private://variables membres allias attributs
int m_ID;//ID by calling constructor and destructor
std::string m_name; //name of the shape, user define
int m_nb_vert;//number of vertices for the shape
vector<Vertex> m_vertex; //vertex x y z, see struct vertex
GLuint m_VAO;//Vertex array object
GLuint m_VBO;//Vertex buffer object
GLuint m_program;
GLuint m_VS;
GLuint m_FS;
const char* m_vertex_shader_code;
const char* m_fragment_shader_code;
float m_color[4];//r v b a
float m_pos[3];//x y z
}; |
et le fichier cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
void Surfaces::fill_shader_code (char *shadercode, GLenum shader_type)
{
switch(shader_type)
{
case GL_VERTEX_SHADER:
sprintf(m_vertex_shader_code,shadercode);
break;
case GL_FRAGMENT_SHADER:
sprintf(m_fragment_shader_code,shadercode);
break;
default:
break;
}
} |
Voilà ! quelqu'un peut il m'éclairer ? merci !!!