순수한 OpenGL 또는 GLSL로 이동 하시겠습니까? [닫은]


11

그래픽 프로그래밍에 관심이있어서 OpenGL을 배우는 것이 분명했습니다. 그러나 포럼과 사이트 주변에 흩어져있는 정보를 수집하면 3.0 이전의 대부분은 더 이상 사용되지 않고 "3.0 이후 모든 것이 쉐이더에 관한 것"이므로 아마존에 대한 리뷰를 인용하기 때문에 순수한 OpenGL 구현이 사라지고있는 것 같습니다. 또한 내가 본 책 중 가장 훌륭한 책은 새로운 버전을 다루는 것처럼 보이지만 부분적으로 만 책의 상당 부분이 더 이상 사용되지 않는 기능을 가르치고 GLSL에 대한 책이 있기 때문입니다.

여기에서 첫 번째 문제가 발생했습니다. 일부 하드웨어는 인텔 통합 그래픽이 장착 된 노트북을 포함하여 GLSL을 지원하지 않습니다. 함수

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

세그먼테이션 오류를 일으켜 드라이버에서 셰이더를 지원하지 않습니다

그래서 내 질문은 OpenGL에서만 게임을 만드는 생존 가능성은 무엇입니까? 셰이더 언어에서 대체 할 수없는 훌륭한 기능이 누락됩니까? 그리고 어떤 종류의 하드웨어 (구 i3, i5, i7, 구형 VGA)를 쉐이더로 게임을 제대로 실행할 수 있을까요?


1
GLSL OpenGL입니다. 귀하의 질문은 사용하려는 하드웨어가 OpenGL 3과 호환되는지, 특히 GLSL과 호환되는지 여부와 관련이 있다고 생각합니다.
decelratedcaviar

@Daniel 하드웨어 / 드라이버가 OpenGL 3.0과 호환되는 경우 GLSL과 호환됩니까?
ibrabeicker

1
GLSL은 OpenGL 3.0 사양의 일부이므로 그렇습니다.
deceleratedcaviar

1
"모두에서 내 드라이버는 셰이더를 지원하지 않습니다." 어떤 버전의 OpenGL을 받고 있습니까? 사용 가능한 모든 OpenGL 기능을 올바르게로드하고 있습니까?
Nicol Bolas

1
@Papavoikos : NULL을 반환 하면 셰이더 사용 여부보다 훨씬 큰 문제가 있습니다. OpenGL 컨텍스트를 올바르게 작성하고 있습니까? 기억하십시오 : 유효한 컨텍스트가 생성되고 최신 상태가 될 때까지 GL 함수를 호출 할 수 없습니다.
Nicol Bolas

답변:


9

셰이더 코드는 glTexEnv, glTexGen 및 텍스처 매트릭스 호출의 혼란보다 명확하고 이해하기 쉬우 며이를 사용하여 임의의 수학 연산을 사용할 수 있다는 보너스가 있습니다 (고정으로 할 수 없음) 파이프 라인- "Pure OpenGL"이라고 부르는 것). 유일한 단점은 코드를 사용하기 전에 일정량의 지원 인프라 스트럭처를 작성해야한다는 것입니다. 반면에 구식 방법은 거의 제대로 뛰어들 수 있습니다. 나는 "잠재적 인"단점이라고 부릅니다. 실제로 그것은 당신이 일을 준비하고 조금 더 미리 배운다고 생각합니다-OpenGL은 "쉬운"평판을 가지고 있으며 때때로 사람들이 이것에 속지 않고 자신이 무엇을하고 있는지 실제로 알지 못하는 상태에서 다이빙을하는 경우가 있습니다.

하드웨어 측면에서는 지난 5/6/7 년 동안 출시 된 거의 모든 것을 어느 정도 쉐이더를 지원할 수 있지만, 구형 인텔 (일부 9xx 시리즈)의 경우 GLSL이 아닙니다. 대신 이전 GL_ARB_vertex_programGL_ARB_fragment_program 확장이됩니다. 이것들은 어셈블리 언어와 같은 쉐이더 언어를 사용하지만 고백 시간-나는 개인적으로 그것을 좋아합니다. 보다 현대적인 기능 (예 : 분기)이 부족하고 동일한 작업을 수행하기 위해 더 많은 셰이더 코드 줄이 필요한 경우 실제로 사용하기가 매우 쉽습니다. 이러한 확장을 위해 기본 프로그램에 필요한 지원 인프라는 GLSL보다 훨씬 가볍습니다.

그러나 GLSL보다 권장한다고 말할 수는 없지만이 하드웨어 클래스에서 실제로 실행 해야하는 경우 옵션이 있으며 이것이 존재한다는 것을 아는 것이 유용합니다. . 이 클래스의 하드웨어에서 실제로 실행해야한다고 확신하십니까 (예 : 노트북의 경우 진입 점을 얻지 못했을 수도 있음)?


Mesa3d가 여전히 opengl 2.1 사양에 있다는 사실을 완전히 무시했습니다. 내가 고칠

6

또한 "순수한 OpenGL"이 더 이상 존재하지 않습니다.

OpenGL ES 2.0은 셰이더가 아닌 모든 것을 버리고 WebGL은이를 기반으로하기 때문에 셰이더에서만 작동합니다. OpenGL 3.0은 모든 고정 함수 기능을 더 이상 사용하지 않으며 3.1은 제거했습니다 (핵심 프로파일에서. 대부분의 구현은 호환성 프로파일을 지원하지만 MacOSX는 3.2 구현에서는 지원하지 않습니다).

따라서 비 셰이더 OpenGL을 배우는 것은 권장하지 않습니다.


6

과거에 프로그래밍을 해본 적이 있다면 GLSL을 사용하여 자신 만의 셰이더 코드를 작성하는 것이 훨씬 즐거울 것입니다. 원래 고정 기능 OpenGL을 배우려고 시도했지만 이해가되지 않았기 때문에 더 어려웠습니다. 그런 다음 주황색 책을 사용하여 GLSL을 배우려고 시도했으며 훨씬 쉬워졌으며 그 이후로 더 많이 만들었습니다. 그냥 내 2 센트.

GPU 용 프로그램을 작성할 수있는 힘 때문에 GLSL로 확실히 갈 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.