2013-09-05 27 views
7

tôi đang gặp rắc rối với những điều sau đây:SDL: Render Texture trên đầu trang của một kết cấu

tôi cần phải làm cho một kết cấu trên đầu trang của kết cấu khác và sau đó làm cho rằng kết cấu chính. Ví dụ tôi có kết cấu hình chữ nhật màu xanh, và tôi muốn vẽ hình chữ nhật màu đỏ trên đỉnh của hình chữ nhật màu xanh lam này. Tuy nhiên tôi muốn họ hạn chế render chỉ trên hình chữ nhật này. Giống như hình ảnh sau: enter image description here

Tôi đã đọc điều gì đó về blit kết cấu giữa chúng hoặc thứ gì đó tương tự nhưng không chắc chắn nếu điều này là posible.

Mã của tôi trông như thế này:

SDL_RenderCopy(ren,bluetexture,NULL,dBLUErect); 
SDL_RenderCopy(ren,redtexture,NULL,dREDrect); 
SDL_RenderPresent(ren); 

Bất kỳ ai biết về cách để làm điều này trong SDL 2.0? thats những gì Im sử dụng bằng cách này.

Trả lời

7

Câu trả lời của sao Hỏa không hoạt động vì nó vẽ một kết cấu màu đen và không có gì có thể được vẽ trên đó.

Nhưng NÀY CÔNG TRÌNH !:

SDL_Texture* auxtexture = SDL_CreateTexture(ren, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 500, 500); 

//change the rendering target 

SDL_SetTextureBlendMode(auxtexture, SDL_BLENDMODE_BLEND); 
SDL_SetRenderTarget(ren, auxtexture); 

//render what we want 
triangle->render(ren); //render my class triangle e.g 


//change the target back to the default and then render the aux 

SDL_SetRenderTarget(ren, NULL); //NULL SETS TO DEFAULT 
SDL_RenderCopy(ren, auxtexture, NULL, canvas->drect); 
SDL_DestroyTexture(auxtexture); 

Cheers.

+3

Một số mẹo cho người đọc trong tương lai. Luôn đảm bảo bạn khởi tạo 'SDL_Renderer' bằng cờ' SDL_RENDERER_TARGETTEXTURE' để hỗ trợ các mục tiêu hiển thị. Ngoài ra, không bao giờ cố gắng sử dụng 'SDL_Texture' được tạo từ' SDL_Surface' bằng cách sử dụng hàm 'SDL_CreateTextureFromSurface'. Nó sẽ không hoạt động. –

+0

@JustinSkiles Tôi rất vui vì ai đó đã nhận thấy sự thiếu SDL_RENDERER_TARGETTEXTURE, trong một thời gian ngắn, tôi nghĩ rằng tôi sẽ phát điên hoặc api đột nhiên thay đổi để cho phép tất cả các trình kết xuất hiển thị thẳng kết cấu đích. – Pharap

3

Trước tiên, bạn cần phải tạo kết cấu mà bạn muốn vẽ bằng cờ SDL_TEXTUREACCESS_TARGET. Vì vậy, tạo back kết cấu như thế này:

back = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 50, 50); 

Sau đó, khi gọi chức năng vẽ, bạn cần phải thiết lập các kết cấu back như mục tiêu, như vậy:

SDL_SetRenderTarget(renderer, back); 

Sau đó, bạn vẽ những gì bạn muốn, và sau đó bạn thay đổi mục tiêu để null:

SDL_SetRenderTarget(renderer, NULL); 

Và làm cho kết cấu back:

SDL_RenderCopy(renderer, back, NULL, &some_rect); 
Các vấn đề liên quan