Một phần của sự cố khi trả lời câu hỏi của bạn là có nhiều thứ bị thiếu và thường là một bộ cờ bit hiếm khi được sử dụng hoặc không áp dụng. Các tài liệu tốt nhất mô tả sự khác biệt thực sự là các tiêu đề thực hiện.
Đối với khuôn khổ tôi đang làm việc trên, tôi đã quyết định biến nó thành nền tảng hoàn toàn giữa máy tính để bàn và iPhone. Cách tiếp cận mà tôi thực hiện trong việc tìm ra nó là viết mã trong OpenGL và xem nó ở đâu. Sau đó tìm trong
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/ System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h
và so sánh nó với
/Developer/SDKs/MacOSX10.5.sdk/ System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h
Những tiêu đề là rất đơn giản và dễ làm theo.
Sự khác biệt chính mà tôi đã phát hiện cho đến nay là không có GLdouble (bất cứ điều gì sử dụng GLdouble như glOrtho và glFrustum có một phiên bản GLFloat glOrthof và glFrustumf). Ngoài ra không có gluPerspective hoặc gluPerspectivef vì lý do nào đó.
Đây là một thả thay thế:
void gluPerspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar)
{
GLfloat xmin, xmax, ymin, ymax;
ymax = zNear * tan(fovy * M_PI/360.0);
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar);
}
Vì bạn không có glBegin và glEnd, bạn phải làm tất cả mọi thứ thông qua glDrawArray hoặc glDrawElements (ưu tiên). Một cách nhanh chóng và dơ bẩn dụ:
void draw(short x, short y, short w, short h)
{
const GLshort t[8] = { 0, 0, 1, 0, 1, 1, 0, 1 };
const GLshort v[8] = { x, y, x+w, y, x+w, y+h, x, y+h };
glVertexPointer(2, GL_SHORT, 0, v);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_SHORT, 0, t);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
}
Check-out Lưu ý kỹ thuật của Apple TN2230 "Optimizing OpenGL ES for iPhone OS" cho một số gợi ý khác mà có thể có ích trong việc porting.
Porting cho đến nay đã khá đau đớn đối với tôi và trừ khi ứng dụng của bạn thực hiện một số công cụ OGL khá tiên tiến hoặc sử dụng chức năng hoàn toàn không được hỗ trợ, bạn sẽ thấy vấn đề của mình bằng cách nhấn nút xây dựng và sửa lỗi đơn giản một chút trong các tập tin gl.h. Trong thực tế, chuyển sang loại ES của lực lượng bạn viết mã dựng hình được tối ưu hóa tốt.
Ok, hoạt động. Xin lỗi, mới đối với ES và không tìm thấy trang Khronos cho đến khi đăng câu hỏi (d'oh!) – Olie