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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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*, ...);
Voilà le .hpp:
et le fichier cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 };
Voilà ! quelqu'un peut il m'éclairer ? merci !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
Partager