SDL_LockTexture 액션을 다른 스레드에 배치하려고 SDL2 릴리스 패키지의 teststreaming.c를 변경했습니다. 내 코드가이 기능을 필요로하기 때문에 작동하는지 여부를 확인하고 싶습니다.SDL2 : 다른 스레드에서 SDL_LockTexture를 사용할 수 있습니까?
내 변화는 다음과 같이 간단하게 종료됩니다
void UpdateTexture(SDL_Texture *texture, int frame)
{
SDL_LockTexture(texture, NULL, &pixels, &pitch);
/*hanlde the pixels*/
SDL_UnlockTexture(texture);
}
int updateStreamFunction(void* data)
{
int frame = 0;
SDL_Texture *MooseTexture;
MooseTexture = (SDL_Texture *)data;
while (gRunning){
frame = (frame + 1) % MOOSEFRAMES_COUNT;
UpdateTexture(MooseTexture, frame);
SDL_Delay(40);
}
printf("quit the thread: updateStreamThread\n");
return 0;
}
int main(int argc, char **argv)
{
.....
MooseTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, MOOSEPIC_W, MOOSEPIC_H);
if (!MooseTexture) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError());
quit(5);
}
threadID = SDL_CreateThread(updateStreamFunction, "updateStreamThread", (void*)MooseTexture);
....
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, MooseTexture, NULL, NULL);
SDL_RenderPresent(renderer);
}
그러나, 변경 나를 위해 작동하지 않습니다. 일부 불필요한 데이터 만 표시합니다. 하지만 UpdateTexture()를 SDL_RenderClear (렌더러) 바로 앞의 window/render/texture가 만들어지는 동일한 스레드에 넣으면됩니다. 그것은 잘 작동합니다.
그래서 주 스레드와 다른 스레드에서 텍스처를 조작하지 못하는 제한이 있습니까? 그렇다면 내 요청을 충족시키는 가장 좋은 방법은 무엇입니까 (표시된 데이터는 다른 스레드에 있음)?
도움을 주셔서 감사합니다. 그냥 나중에 참조