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 : 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*, ...);
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 : 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
 
};
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
 
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 !!!