Народный учебник по OpenGL


Урок 24. Лексемы, Расширения, Вырезка и Загрузка TGA - часть 17


 

В следующей строке мы разрешаем вырезку. Что бы мы ни рисовали за пределами вырезанного окна, не появится. Вы можете нарисовать ОГРОМНЫЙ четырехугольник на экране с 0,0 до 639,480, но Вы увидите только ту часть, которая попала в вырезанное окно. Оставшаяся часть экрана не будет видна. Замечательная команда!     

 

Третья строка кода создает переменную text, которая будет хранить символы, возвращаемые glGetString(GL_EXTENSIONS).  malloc(strlen((char *)glGetString(GL_EXTENSIONS))+1) выделяет достаточно памяти, для хранения всей строки, которая будет возвращена, + 1 (таким образом, если строка содержит 50 символов, то text будет в состоянии хранить все 50 символов).

 

Следующая строка копирует информацию GL_EXTENSIONS в text. Если мы непосредственно модифицируем информацию GL_EXTENSIONS, то возникнут большие проблемы, поэтому вместо этого мы копируем информацию в text, и затем манипулируем информацией, сохраненной в text. По сути, мы просто берем копию и сохраняем ее в переменной text.

 

  // Определяем область вырезки

  glScissor(1,int(0.135416f*sheight),swidth-2,int(0.597916f*sheight)); 

  glEnable(GL_SCISSOR_TEST);        // Разрешаем вырезку

 

  // Выделяем память для строки расширений

  char* text=(char*)malloc(strlen((char *)glGetString(GL_EXTENSIONS))+1);

  // Получаем список расширений и сохраняем его в text

  strcpy (text,(char *)glGetString(GL_EXTENSIONS));

 

Сейчас, немного нового. Давайте предположим, что после захвата информации о расширениях из видеокарты, в переменной text хранится следующая строка... "GL_ARB_multitexture GL_EXT_abgr GL_EXT_bgra". strtok(TextToAnalyze,TextToFind) будет сканировать переменную text пока не найдет в ней " "(пробел). Как только пробел будет найден, будет скопировано содержимое text ВПЛОТЬ ДО пробела в переменную token. В нашем случае, token будет равняться "GL_ARB_multitexture". Затем пробел заменится маркером. Подробнее об этом через минуту.    




- Начало -  - Назад -  - Вперед -