HLFX.Ru Forum
Показать все 43 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Получение текстуры (https://hlfx.ru/forum/showthread.php?threadid=4180)


Отправлено domded 21-11-2013 в 18:47:

Получение текстуры

Задача такова. Я хочу сделать камеру на оружии ( типа, в прицеле снайперской винтовки виден мир ).
Для этого творю следующие непотребства:

C++ Source Code:
1
cl_entity_t *viewent;
2
viewent = gEngfuncs.GetViewModel();
3
if (!viewent->model->name) return;
4
studiohdr_t *vm = (studiohdr_t*)IEngineStudio.Mod_Extradata(viewent->model);
5
char pri[255];
6
gEngfuncs.pfnConsolePrint(pri);
7
texture_t *ct = (texture_t*)((byte*)vm + vm->texturedataindex);
8
for (int k = 0; k < vm->numtextures; k++)
9
{
10
  if (!stricmp(ct[k].name,"cam_vfind.bmp"))
11
    gEngfuncs.pfnConsolePrint(ct[k].name);
12
}

Чтобы найти текстуру с именем cam_vfind.bmp. Проблема в том, что имена у нектороых текстур пишутся, а у некоторых нет, следовательно, cam_vfind не ищется. Правильно ли я вообще получаю доступ к списку текстур? Делаю это всё в tri.cpp.


Отправлено Дядя Миша 21-11-2013 в 19:02:

Цитата:
domded писал:
C++ Source Code:
viewent = gEngfuncs.GetViewModel();
if (!viewent->model->name) return;

Так нельзя, надо так:
C++ Source Code:
viewent = gEngfuncs.GetViewModel();
if (!viewent->model) return;


Цитата:
domded писал:
Чтобы найти текстуру с именем cam_vfind.bmp.

Зачем искать отдельно? Когда рисуешь - тогда и проверяй.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 21-11-2013 в 19:36:

viewent пробовал. проблема в том, что он всегда не нуловый. прверял даже с выводом в консоль, следовательно, игра виснет, когда пытаюсь получить указатель на список текстур.
я не нашёл в studiomodelrenderer_hardware, где отдельно натягиваются текстуры. поэтому и понёс всё это в hud_drawtransparenttriangles


Отправлено Дядя Миша 21-11-2013 в 20:41:

Кта не нулловый? А когда у тебя пушки в руках нету чем равен viewent->model? Да ничему.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 22-11-2013 в 02:25:

Почему-то у меня указатель на viewent никогда не равен нуллу, даже если пушки в руках нет. Пишу под чистый хл.
Где конкретно рисуется текстура для модели? В рендерере этого не нашёл.
Попробовал перенести свой код:

C++ Source Code:
1
//are we processing viewmodel?
2
if (m_pCurrentEntity == gEngfuncs.GetViewModel() )
3
{
4
  //gEngfuncs.pfnConsolePrint(m_pCurrentEntity->model->name);
5
  //gEngfuncs.pfnConsolePrint("\n");
6
  char sz[255];
7
  texture_t* tex = (texture_t*)((byte*)m_pStudioHeader+m_pStudioHeader->textureindex);
8
  for (int i = 0; i < m_pStudioHeader->numtextures; i++ )
9
  {
10
    gEngfuncs.pfnConsolePrint(tex[i].name);
11
    gEngfuncs.pfnConsolePrint("\n");
12
  }
13
 
14
}

в StudioRenderFinal_Hardware. И почему-то опять не получается получить нормальные имена текстур - он выводит их не все, хотя те, что выводит - получаются правильные, совпадают с названиями текстур в модели. Некоторые строчки просто получаются равными нулю.
Ещё я заметил, что в туторе по натягиванию видеотекстур в структуре texture_s есть поле gl_texturenum, и уж был нацелился использвоать его для фотографирования экрана и помещения снимка в кам_вфайнд, но возникло огорчение. Почему-то в оригинальной халве его нет. Это нужно подключать полностью параноевский рендерер, я правильно понял?


Отправлено Дядя Миша 22-11-2013 в 09:01:

Цитата:
domded писал:
Некоторые строчки просто получаются равными нулю.

а у тебя модель не с внешними текстурами?
Цитата:
domded писал:
Это нужно подключать полностью параноевский рендерер, я правильно понял?

Достаточно взять com_model.h из паранои. Он тоже наполовину неправильный, но работать будет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 22-11-2013 в 11:38:

Нет, все текстуры зашиты в модель, в формате бмп. Из-за чего может быть, что не все имена читаются?


Отправлено Дядя Миша 22-11-2013 в 12:56:

Цитата:
domded писал:
Из-за чего может быть, что не все имена читаются?

руки кревыя?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 22-11-2013 в 14:55:

это понятно. можете сказать, как правильно рассчитывать смещение до каждой текстурной структуры? или где они рисуются?


Отправлено Дядя Миша 22-11-2013 в 15:06:

Ты модельку открой в HLMV и там имена посмотри. Потому что код у тебя правильный, там нет проблем.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 22-11-2013 в 15:19:

даже если взять в руки дробовик из оригинальной игры, он пишет мне только название первой текстуры из четырёх (Spas12_Reference.BMP:0), полностью вывод такой ( tex[i]->name, i ):

Spas12_Reference.BMP:0
:1
:2
:3

все мозги себе сломал.


Отправлено Дядя Миша 22-11-2013 в 16:05:

А почему ты представляешь это в виде texture_t?
Кто тебя такой глупости научил?
Вот же

C++ Source Code:
1
// skin info
2
typedef struct mstudiotex_s
3
{
4
  char		name[64];
5
  int		flags;
6
  int		width;
7
  int		height;
8
  int		index;
9
} mstudiotexture_t;

в нее и преобразовывай, а не в texture_t. Додумался.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 22-11-2013 в 16:38:

смотрел по тутору о добавлении видеотекстур. не додумался как-то, что текстуры моделей хранятся в другом формате.
в mstudiotexture еcть индекс. подскажите, куда он ссылается, где хранятся непосредственно пиксели этой самой текстуры ( я так понимаю, формат w*h*3) ?


Отправлено Дядя Миша 22-11-2013 в 16:50:

это gl-index загруженной текстуры.

Добавлено 22-11-2013 в 20:50:

Ну то есть как, сначала это индекс на массив пикселей, а потом он перезаписывается как индекс загруженной в видеопамять текстуры.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 23-11-2013 в 21:59:

Делаю так:

C++ Source Code:
1
//are we processing viewmodel?
2
if (m_pCurrentEntity == gEngfuncs.GetViewModel() )
3
{
4
  //gEngfuncs.pfnConsolePrint(m_pCurrentEntity->model->name);
5
  //gEngfuncs.pfnConsolePrint("\n");
6
  char sz[255];
7
  mstudiotexture_t*tex = (mstudiotexture_t*)((byte*)m_pStudioHeader+m_pStudioHeader->textureindex);
8
  for (int i = 0; i < m_pStudioHeader->numtextures; i++ )
9
  {
10
    if (!stricmp("cam_vfind.bmp",tex[i].name))
11
    {
12
      sprintf(sz,"%s:%i size %i x %i \n",tex[i].name,tex[i].index,tex[i].width,tex[i].height);
13
      gEngfuncs.pfnConsolePrint(sz);
14
      //creating current image of screen
15
      if (glIsTexture(tex[i].index))
16
      {
17
        GLuint worldId;
18
        unsigned char *worldImg = new unsigned char[ScreenWidth*ScreenHeight*3];
19
 
20
        glBindTexture(GL_TEXTURE_RECTANGLE_NV,tex[i].index);
21
        glReadPixels(0,0,ScreenWidth,ScreenHeight,GL_RGB,GL_UNSIGNED_BYTE,worldImg);
22
        glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, tex[i].width, tex[i].height, 0, GL_RGB, GL_UNSIGNED_BYTE, worldImg);
23
        //glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
24
        //glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
25
        delete[] worldImg;
26
      }
27
 
28
    }
29
    //gEngfuncs.pfnConsolePrint("\n");
30
  }
31
  delete[] tex;
32
 
33
}

Изображение в прицеле появляется, но компьютер начинает очень сильно тормозить + оно получается очень растянутое - полосам идёт. Что я делаю не так?

Добавлено 24-11-2013 в 01:59:

Насчёт растяжения разобрался - надо было просто добавить gluScaleImage. А с тормозами вопрос остался. Возможно ли получить пиксели экрана быстрее, чем через glReadPixels?


Отправлено domded 24-11-2013 в 02:57:

Вместо нагороженной кучи кода, как оказалось, можно сделать совсем по-другому.

C++ Source Code:
glBindTexture(GL_TEXTURE_2D,tex[i].index);
glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGB,(ScreenWidth-XRES(400))/2,(ScreenHeight-YRES(300))/2,400,300,0);

Но остался последний вопрос. Я хочу, чтобы кусок из вида брался точно по середине, а сейчас он сполз куда-то вниз по оси у. Как сделать его точно по центру?
или это может зависить от наложения юв-координат на прицеле винтовки? там они не по центру, а где-то в правом верхнем углу болтаются.

Добавлено 24-11-2013 в 06:35:

Прикладываю картинку в качестве объяснения предыдущей проблемы.

Добавлено 24-11-2013 в 06:57:

и всё равно с винтовкой фпс у меня падает до 15-20, при 60-70 нормальных.


Отправлено pRoxxx 24-11-2013 в 09:15:

Цитата:
domded писал:
и всё равно с винтовкой фпс у меня падает до 15-20, при 60-70 нормальных.

Попробуй через http://www.opengl.org/sdk/docs/man/...SubImage2D.xml, или через FBO но он вроде не шибко быстрее, если скейлишь через gluScaleImage , то у меня для тебя плохие новости, он садит фпс. (=


Отправлено Дядя Миша 24-11-2013 в 13:38:

Цитата:
domded писал:
и всё равно с винтовкой фпс у меня падает до 15-20, при 60-70 нормальных.

я вообще удивляюсь, что у тебя FPS, а не SPF, ибо ты допустил все возможные ошибки, какие только можно было допустить.
Во первых зачем тебе реад пиксельс, во вторых, зачем тебе доп. проход, если можно просто вырезать кусочек с экрана до того, как нарисована пушка (это легко отловить при начале отрисовки пушки с эвентом STUDIO_RENDER), в третьих зачем тебе glScaleImage, в четвертых зачем каждый кадр искать эту чортову текстуру заново, в пятых зачем ты юзаешь текс имидж, если надо юзать текс саб имидж. Т.е. можно продолжать до бесконечности. Да ерунда это полная с винтовкой, потому что она у тебя должна работать как зеркало, т.е. отражать то что за твоей спиной, а не то, что в линзу видно. Ты сам подержи винтовку так, как на скрине и убедись, что в прицел при таком положении не видно ничего.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 24-11-2013 в 14:12:

каждый кадр - изображение в прицеле должно соответствовать текстуре на том, что видно у меня без пушки. делаю по подобию коф, там же тоже было изображение спереди, а не сзади.
реадпиксельс я уже не использую, и скейлимадж тоже. единственное, что использую из описанного вами - копутексимадж. попробую сейчас перевести на текссабимадж.
я не очень сильно знаком с опенгл, поэтому пока так. знал бы, как это сделать - не пришёл сюда. поэтому и спрашиваю вас разные вопросы.


Отправлено ~ X ~ 25-11-2013 в 09:58:

Цитата:
Дядя Миша писал:
Кта не нулловый? А когда у тебя пушки в руках нету чем равен viewent->model? Да ничему.



Я тебя обрадую: в ХЛ gEngfuncs.GetViewModel() всегда ненулловый. Если поглядишь хлсдк - там дажн проверок нет.
Кстати, viewent - это энтитя, на которую тебе сделали SET_VIEW.

Короч, мимо проходил просто.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 25-11-2013 в 10:12:

Цитата:
domded писал:
знал бы, как это сделать - не пришёл сюда.

Ну да, мы тут как учителя младших классов. Научим, вымотаем свои нервы, отправим в среднюю школу - и потом про нас никто не вспомнит.

__________________

xaerox on Vivino


Отправлено Дядя Миша 25-11-2013 в 11:22:

Цитата:
~ X ~ писал:
Я тебя обрадую: в ХЛ gEngfuncs.GetViewModel() всегда ненулловый

Да причём тут viewent? У нее есть модель и эта модель может быть равна нулю.
C++ Source Code:
1
cl_entity_t *ent = gEngfuncs.GetViewModel();
2
 
3
if( ent->model )
4
{
5
}

Понятно ли тебе, что делает этот код?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 25-11-2013 в 11:49:

Я вообще собирался тутор по инвентарю писать и выложить все свои наработки сюда. Ибо пилю не мод, а просто хочу разобраться "как это работает". Или я похож на дебила, который хочет сделать римейк коф?
дядя миша, я тоже в тесте поучаствую. этот код получает вьюентити, а затем проверяет, ent->model!=NULL?


Отправлено XaeroX 25-11-2013 в 11:52:

Цитата:
domded писал:
Или я похож на дебила, который хочет сделать римейк коф?

Откуда мы знаем, на кого ты похож?
Выложи фотку - поглядим.
Или хотя бы аватарку поставь.

__________________

xaerox on Vivino


Отправлено domded 25-11-2013 в 12:13:

упдатировал свой код. теперь он выглядит так:

C++ Source Code:
1
//are we processing viewmodel?
2
if (m_pCurrentEntity == gEngfuncs.GetViewModel() )
3
{
4
  mstudiotexture_t*tex = (mstudiotexture_t*)((byte*)m_pStudioHeader+m_pStudioHeader->textureindex);
5
  for (int i = 0; i < m_pStudioHeader->numtextures; i++ )
6
  {
7
    if (!stricmp("cam_vfind.bmp",tex[i].name))
8
    {
9
      if (glIsTexture(tex[i].index))
10
      {
11
        glBindTexture(GL_TEXTURE_2D,tex[i].index);
12
        glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGB,(ScreenWidth-XRES(400))/2,(ScreenHeight-YRES(300))/2,400,YRES(300),0);
13
 
14
      }
15
 
16
    }
17
  }
18
  delete[] tex;
19
 
20
}

Опять тормоза жуткие, 20 fps.
И поставил аватарку специально по просьбе ксерокса.
Я не понимаю, как поствить туда текссабимадж. Он требует пиксельную дату экрана. Буду разбираться сейчас.


Отправлено Дядя Миша 25-11-2013 в 12:35:

Цитата:
domded писал:
delete[] tex;

Ну вот что ты делаешь, а? Что ты там удаляешь? Ты его выделял, чтоб удалять?
И сразу после glCopyTexImage2D ставь break;

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено pRoxxx 25-11-2013 в 13:03:

Цитата:
domded писал:
Я не понимаю, как поствить туда текссабимадж

Потому что тебе надо не glTexSubImage2d, а glCopyTexSubImage2d.И как Дядь Миша уже писал, на кой хрен ты каждый кадр ищешь текстуру?


Отправлено domded 25-11-2013 в 21:49:

Всё равно не получается никакого выигрыша в производительности. Я так понимаю, что glCopyTexSubImage2D требует glTexImage2D, об этом даже в справочнике по огл написано.
Как понять - зачем? Индекс у текстуры разный на разных моделях, поэтому естественно, что приходится искать её в списке текстур модели. Конечно, можно завести глобальную прееменную, но выигрыш от этого мне кажется сомнительным. Я не могу найти в студиомодельрендерере место, где рисуются текстуры, поэтому приходится искать в рендерфайнал.
И ещё, можно ли как-то получить размеры и позицию юв-мапы относительно оригинальной текстуры? Из-за того, что юв-мапа приклеена не по центру, у меня получается, что берётся не та часть картинки, которую хочу.


Отправлено XaeroX 25-11-2013 в 23:19:

Цитата:
domded писал:
Я так понимаю, что glCopyTexSubImage2D требует glTexImage2D

В каком смысле - требует?

__________________

xaerox on Vivino


Отправлено domded 25-11-2013 в 23:32:

Всё, я жёстко протупил.
В теле получился такой код

C++ Source Code:
1
glBindTexture(GL_TEXTURE_2D, tex[i].index);
2
glBindTexture(GL_TEXTURE_2D, tex[i].index);			glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,XRES(tex[i].width),YRES(tex[i].height),0,GL_RGB,GL_UNSIGNED_BYTE,NULL);
3
glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,(ScreenWidth-XRES(tex[i].width))/4,ScreenHeight-YRES(tex[i].height),XRES(tex[i].width),YRES(tex[i].height));
4
break;

Требует - без неё копутекссабимадж не работает. Проверял.
В итоге всё равно получаю падение фпс в два раза.


Отправлено XaeroX 25-11-2013 в 23:40:

Цитата:
domded писал:
Требует - без неё копутекссабимадж не работает

Требует один раз, а не каждый кадр.

__________________

xaerox on Vivino


Отправлено domded 26-11-2013 в 00:19:

Заключил создание текстуры под проверку ошибки. Всё равно тормоза, хотя teximage2d каждый кадр уже не вызывается.
Ещё странность: У меня glGetError никогда не равно GL_INVALID_OPERATION. приходится просто проверять на правду.


Отправлено XaeroX 26-11-2013 в 00:24:

domded
Значит, теперь каждый кадр вызывается что-то другое, только и всего.
А вообще, если copytexsubimage не даёт прироста, значит, проблема вообще в другом месте.

__________________

xaerox on Vivino


Отправлено domded 26-11-2013 в 00:28:

оно каждый кадр и вызывается. ну, ещё проход по списку текстур модели с целью найти нужную.

C++ Source Code:
1
if (m_pCurrentEntity == gEngfuncs.GetViewModel() )
2
{
3
  mstudiotexture_t*tex = (mstudiotexture_t*)((byte*)m_pStudioHeader+m_pStudioHeader->textureindex);
4
  for (int i = 0; i < m_pStudioHeader->numtextures; i++ )
5
  {
6
    if (!stricmp("cam_vfind.bmp",tex[i].name))
7
    {
8
      //creating current image of screen
9
      if (glIsTexture(tex[i].index))
10
      {
11
 
12
        glBindTexture(GL_TEXTURE_2D, tex[i].index);
13
 
14
        glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,(ScreenWidth-XRES(tex[i].width))/4,ScreenHeight-YRES(tex[i].height),XRES(tex[i].width),YRES(tex[i].height));
15
 
16
        if (glGetError())
17
        {
18
          glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,XRES(tex[i].width),YRES(tex[i].height),0,GL_RGB,GL_UNSIGNED_BYTE,NULL);
19
        }
20
        break;
21
      }
22
 
23
    }
24
  }
25
  delete[] tex;
26
 
27
}


Отправлено XaeroX 26-11-2013 в 00:54:

1) Зачем вызов glIsTexture?
2) Ты уверен, что glGetError не возвращает какой-нибудь предыдущий еррор?
3) До каких пор в конце будет стоять "delete[] tex"?

__________________

xaerox on Vivino


Отправлено domded 26-11-2013 в 01:03:

Потому что дядя миша говорил, что когда-то оно есть просто индекс на массив пикеселей. Сейчас убрал проверку, почистил ненужное удаление указателя. Всё работает, но проблема осталась. Причём в разрешении 640х480 падает до 30, а в 1024х768 - до 10. Я, в принципе, понимаю, почему - картинка увеличивается, но glTexImage2D по-прежнему вызывается один раз.
Уверен. Не может этого быть, потому что код ошибки в sprintf %i - 12***, что соответствует именно GL_INVALID_OPERATION. Но почему-то он упорно не хочет равнять их.


Отправлено Дядя Миша 26-11-2013 в 16:11:

domded ты хоть скажи конфигурацию своего компьютера. А то сейчас окажется, что у тебя RivaTNT.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 26-11-2013 в 19:33:

Радеон 9600 128 мб, 1 гиг оперативки.
УПД: кстати, ваш ксаш-движок на карте с мониторами или проектором тоже выдаёт мне около 5 фпс. когда мониторов два - он вообще работает со скоростью один кадр в пять-десять секунд.


Отправлено Дядя Миша 26-11-2013 в 19:51:

Гы-гы. Ну я почему-то так и думал.

C++ Source Code:
1
bool m_bGrabScreen = false;
2
 
3
void HUD_VidInit( void )
4
{
5
  m_bGrabScreen = false;
6
}
7
 
8
if (m_pCurrentEntity == gEngfuncs.GetViewModel() )
9
{
10
  mstudiotexture_t*tex = (mstudiotexture_t*)((byte*)m_pStudioHeader+m_pStudioHeader->textureindex);
11
 
12
  for (int i = 0; i < m_pStudioHeader->numtextures; i++ )
13
  {
14
    if (!stricmp("cam_vfind.bmp",tex[ i ].name))
15
    {
16
      glBindTexture(GL_TEXTURE_2D, tex[ i ].index);
17
 
18
      if( !m_bGrabScreen )
19
      {
20
        glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,XRES(tex[ i ].width),YRES(tex[ i ].height),0,GL_RGB,GL_UNSIGNED_BYTE,NULL);
21
        m_bGrabScreen = true;
22
      }
23
      else
24
      {
25
        glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,(ScreenWidth-XRES(tex[ i ].width))/4,ScreenHeight-YRES(tex[ i ].height),XRES(tex[ i ].width),YRES(tex[ i ].height));
26
      }
27
      break;
28
    }
29
  }
30
}

Хотя моё мнение, что glTexImage там вообще не нужен, поскольку текстура уже была создана еще движком.

Добавлено 26-11-2013 в 23:51:

Цитата:
domded писал:
кстати, ваш ксаш-движок на карте с мониторами или проектором тоже выдаёт мне около 5 фпс

Ну не обманывай, нету в ксаш-движке никаких мониторов

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 26-11-2013 в 19:55:

Неправильно выразился. В демокарте ксаш-хт.
У меня проблема в том, я так понял, что видюха очень древняя?


Отправлено Дядя Миша 26-11-2013 в 20:00:

Нет, видюха вполне норм. На её старшем брате Radeon9800 я сталкера проходил. У тебя скорее оч. слабый процессор, просто ужас какой слабый.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено domded 26-11-2013 в 20:06:

Странно. Процессор у меня пентиум 4 2.8 ггц . Но почему-то тот же многострадальный коф с его рендером у меня жутко тормозит. Оригинальную параною смотел очень давно, поэтому про неё ничего не помню.
А насчёт glTexImage - я вызываю его потому что без него не работает glCopyTexSubImage.
В любом случае - благодарю вас и ксерокса за помощь.


Отправлено Дядя Миша 26-11-2013 в 20:28:

Цитата:
domded писал:
Процессор у меня пентиум 4 2.8 ггц

Ну вот и ответ на твой вопрос. Пентиум4 - это воздушные мегагерцы.
Там почти 70% процентов времени занимают промахи кэша, из-за чего какой-нибудь пентиум3 866 мегагерц сплошь и рядом оказуется шустрее.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 09:38.
Показать все 43 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024