Tôi đang tạo hình ảnh bằng thạch anh 2d và tôi muốn sử dụng hình ảnh đó làm kết cấu tròn. Phần khó khăn là tôi muốn sử dụng càng ít bit trên mỗi pixel càng tốt, vì vậy tôi tạo cgContext như sau:Sử dụng hình ảnh được tạo bằng CGBitmapContextCreate dưới dạng kết cấu opengl
int bitsPerComponent = 5;
int bytesPerPixel = 2;
int width = 1024;
int height = 1024;
void* imageData = malloc(width * height * bytesPerPixel);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageContext context = CGBitmapContextCreate(imageData, width, height, bitsPerComponent, width * bytesPerPixel, colorSpace, kCGImageAlphaNoneSkipFirst);
//draw things into context, release memory, etc.
Như đã nêu trong tài liệu hướng dẫn here, đây là chỉ hỗ trợ định dạng pixel RGB cho CGBitmapContextCreate sử dụng 16 bit trên mỗi pixel. Vì vậy, bây giờ tôi muốn tải lên hình ảnh nàyData trông giống như "1 bit bỏ qua - 5 bit màu đỏ - 5 bit màu xanh lá cây - 5 bit xanh" thành kết cấu tròn. Vì vậy, tôi nên làm một cái gì đó như thế này:
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, imageData);
Điều đó sẽ không hoạt động vì trong cuộc gọi này tôi đã chỉ định định dạng pixel là "5 red - 5 green - 5 blue - 1 alpha". Điều đó là sai, nhưng có vẻ như không có định dạng nào phù hợp với đầu ra đồ họa lõi.
Có một số tùy chọn khác như GL_UNSIGNED_SHORT_1_5_5_5_REV, nhưng những tùy chọn này sẽ không hoạt động trên iphone.
Tôi cần một số cách để sử dụng hình ảnh nàyData như một kết cấu, nhưng tôi thực sự không muốn trao đổi byte xung quanh bằng tay bằng cách sử dụng memset hoặc như vậy, bởi vì điều đó có vẻ khủng khiếp không hiệu quả.
Tại sao sự quan tâm về 5 bit trên mỗi pixel? Tại sao không chỉ có bối cảnh của bạn là những gì làm việc dễ dàng nhất cho opengl và nếu hình ảnh nguồn của bạn là khác nhau cho phép thạch anh để làm việc chuyển đổi khi nó rút nó vào bối cảnh của bạn? Tôi có đủ loại kết cấu động trong trò chơi của mình và chưa bao giờ gặp phải những vấn đề này. – badweasel
Tôi đã tạo câu hỏi này vào năm 2010, khi chúng tôi vẫn đang hỗ trợ 2g deivces. 2g và 3g cả hai đều có rất ít memmory, và các ứng dụng không phải là một trò chơi - đó là một người đọc ebook. Chúng tôi đã phải sử dụng ít nhất 10MB dữ liệu chỉ dành cho công cụ phân tích cú pháp/tạo kiểu/bố cục văn bản của chúng tôi và mỗi bit nhỏ của byte là rất quan trọng. Tôi không chắc chắn rằng ai đó có thể phải sử dụng điều này trong năm 2012, nhưng có lẽ vẫn có những ứng dụng ngoài đó bị giết với cảnh báo memmory và muốn giảm dấu chân memmory. – Alexey
@Alexey: Bạn có thể vui lòng cho chúng tôi biết, độ phân giải của dữ liệu hình ảnh bạn đang tải cho kết cấu là gì? – 8Ours