질문에 답하는 데 문제가되는 부분 중 많은 부분이 누락되어 있으며 거의 사용되지 않거나 적용 할 수없는 비트 플래그 집합입니다. 차이점을 설명하는 가장 좋은 문서는 실제로 구현 헤더입니다.
프레임 워크에서 필자는 데스크톱과 아이폰간에 완전히 크로스 플랫폼을 만들기로했습니다. 내가 알아내는 방식은 OpenGL에서 코드를 작성하고 중단되는 부분을 확인하는 것입니다. 그런 다음
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/ System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h
에서 보면 이러한 헤더가 매우 간단하고 따라하기 쉬운
/Developer/SDKs/MacOSX10.5.sdk/ System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h
비교합니다.
내가 지금까지 발견 한 주요 차이점은 GLdouble (glOrtho 및 glFrustum과 같은 GLdouble을 사용하는 모든 것이 GLOlothof 및 glFrustumf 버전을 가짐)입니다. 또한 어떤 이유로 든 gluPerspective 또는 gluPerspectivef가 없습니다. 더의 glBegin과 glEnd이 없기 때문에, 당신은 glDrawArray 또는 glDrawElements (선호)를 통해 모든 것을 할 필요가
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);
}
: 여기
교체의 하락이다. 신속하고 더러운 예 :
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);
}
체크 아웃 이식에 유용 할 수있는 몇 가지 다른 힌트에 대한 애플의 기술 노트 TN2230 "Optimizing OpenGL ES for iPhone OS".
지금까지 이식 작업은 상당히 고통스럽지 않습니다. 앱이 꽤 고급 OGL 작업을 수행하거나 완전히 지원되지 않는 기능을 사용하지 않는 한 빌드 버튼을 치면 문제를 찾을 수 있고 간단한 수정은 파고들 것입니다. gl.h 파일에서 약간. 실제로 ES 종류로 이식하면 좋은 최적화 된 렌더링 코드를 작성해야합니다.
좋습니다. 죄송합니다. ES에 처음 오신 분, 질문을 올릴 때까지 Khronos 사이트를 찾지 못했습니다. ( – Olie