Comment passer un std::string en glShaderSource?

J'ai le code suivant:

glShaderSource(shader, 1, (const char **)data.c_str(), NULL);

Mais il rend mon programme crash. Comment puis-je convertir des std::string en const char ** ?
J'ai aussi essayé (const char **)&, mais il a dit "exige l-valeur" dont je ne comprends pas. Il fonctionne très bien lorsque j'utilise ce code:

const char *data = "some code";
glShaderSource(shader, 1, &data, NULL);

Mais je ne peux pas le faire fonctionner directement à partir d'un std::string. Je peut allouer une nouvelle char tableau pour cela, mais ce n'est pas bon code.

J'ai aussi essayé avec const GLchar mais évidemment, il ne fait aucune différence.

  • Jetez un oeil à cette fonction documentation. Il doit y avoir une raison, il prend un pointeur vers un pointeur. Soi-disant c'est un paramètre de sortie, et la fonction écrit un char* à la déréférencé char**. Dans ce cas, vous devez passer l'adresse d'un vrai pointeur, et non pas de certains temporaire retourné par std::string::c_str().
  • Ce n'est pas un paramètre de sortie, il s'attend à un tableau de c-strings.
  • Ah, oui, j'ai oublié à propos de cette possibilité.
  • Je pense que cette question est encore un autre de "pourquoi je ne peux pas le faire..." alors que la vraie question devrait être: "pourquoi voudriez-vous?". Vous êtes un casting pour un incompatible type de pointeur. Il n'est pas toujours censé fonctionner. Je pense qu'il est censé faire de vous arrêter et de réfléchir qu'est-ce que vous ne comprenez pas sur glShaderSource. 15 secondes de google aurait dit que le 3ème argument "Spécifie un tableau de pointeurs sur des chaînes de caractères contenant le code source pour être chargé dans le shader.". Le titre de votre question est totalement trompeuse: vous vous ne pouvez pas faire une telle conversion.
InformationsquelleAutor Rookie | 2011-05-18