Also mein Hauptziel ist es, die Pixeldaten einer bestimmten Textur zu lesen. Um dies zu testen, habe ich eine neue Textur mit Zielzugriff erstellt und dann rot gezeichnet.Warum kann ich in SDL2 keine Textur zeichnen?
Das Problem ist, dass, wenn ich auf die Pixeldaten zugreifen, sagt SDL_RenderReadPixels() die Tonhöhe ist 0, und alle Pixeldaten sind 0. Auch wenn ich versuche, die neue Textur zu zeichnen, kommt es schwarz.
SDL_Texture* tempChar = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 3, 5);
if (SDL_SetRenderTarget(renderer, tempChar) != 0) {
cout << "SDL_SetRenderTarget() Error! " << SDL_GetError() << endl;
} else {
cout << "SDL_SetRenderTarget() success" << endl;
}
if (SDL_RenderClear(renderer) != 0) {
cout << "SDL_RenderClear() Error! " << SDL_GetError() << endl;
} else {
cout << "SDL_RenderClear() success" << endl;
}
if (SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255) != 0) {
cout << "SDL_SetRenderDrawColor() Error! " << SDL_GetError() << endl;
} else {
cout << "SDL_SetRenderDrawColor() success" << endl;
}
if (SDL_RenderFillRect(renderer, NULL) != 0) {
cout << "SDL_RenderClear() Error! " << SDL_GetError() << endl;
} else {
cout << "SDL_RenderClear() success" << endl;
}
int w;
int h;
Uint32 format;
int access;
if (SDL_QueryTexture(tempChar, &format, &access, &w, &h) != 0) {
cout << "SDL_QueryTexture() ERROR : " << SDL_GetError() << endl;
} else {
cout << "SDL_QueryTexture() no error" << endl;
}
cout << "width is : " << w << " height is : " << h << endl;
if (access == SDL_TEXTUREACCESS_TARGET) {
cout << "TARGET" << endl;
}
if (format == SDL_PIXELFORMAT_RGBA8888) {
cout << "format is : SDL_PIXELFORMAT_RGBA8888" << endl;
}
void* readPixels = NULL;
int pitch;
if (SDL_RenderReadPixels(renderer, NULL, 0, readPixels, pitch) != 0) {//12 pitch, 3x4bytes
//an error occurred
cout << "SDL_RenderReadPixels() Error, text probably wont work... :-/\n" << SDL_GetError() << endl;
} else {
cout << "SDL_RenderReadPixels() success" << endl;
}
cout << "pitch returned : " << pitch << endl;
menuMouse = tempChar;
for (int i = 0; i < 5; i++) {
cout << "i is : " << i << endl;
char* rowStart = ((char*) readPixels) + i * pitch;
cout << "pix data is : " << int(rowStart) << endl;
}
Aaah ja, das ist genau das was ich von den Pixeldaten angenommen habe, da die Dokumentation wirklich nicht so oder so aussagt. Und für die Tonhöhe, omg wie dumm von mir. Gibt es auch einen besseren Ort für die Dokumentation? [link] (https://wiki.libsdl.org/SDL_RenderReadPixels) Das Wiki scheint sehr spezifisch zu sein. – Tristus
@Tristus Entschuldigung, ich habe nie wirklich nach einem gesucht. Im Zweifelsfall und wenn Wiki zu kurz kommt, schaue ich lieber in den Quellcode. – keltar