Перейти к содержанию
Fire Monkey от А до Я
  • 0

Можно ли создать класс от TCustomContextOpenGL ?


тим адвайтов

Вопрос

В файле fmx.context.gles.pas есть класс TCustomContextOpenGL, а в нём процедура 

TCustomContextOpenGL.DoInitializeTexture(const Texture: TTexture);

Вот в этой процедуре хотелось бы изменить вызовы

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

на 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

для того, чтобы текстура не натягивалась (clamp), а размножалась (tile).

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

скопировать файлик, поменять в нем эти строки. положить в папку с проектом и подключить через project->add

Ссылка на комментарий
  • 0

Например, FRenderBuf: GLuint;  GLuint - "undecrared identifier".

И ещё куча ошибок того же типа. Все, похоже, имеют отношение к OpenGL.

Дело в том, что я привык, что в секции uses обычно есть все модули, в которых объявлены типы, но тут в толк не возьму, что ещё надо прицепить. Наверное, это зависит от целевой платформы?

Компиллирую на ХЕ7+update1, под windows7.

Ссылка на комментарий
  • 0
  • Администраторы

Потому что под Windows FireMonkey использует DirectX 11 (FMX.Context.DX11 или FMX.Context.DX9), а не OpenGL. Поэтому этот модуль вообще отсутствует под Windows.

Ссылка на комментарий
  • 0

Да, действительно, с этим файлом компилится под андроид и запускается. Спасибо,Ярослав!

Но картинка осталась прежняя, несмотря на сделанные изменения.

Ссылка на комментарий
  • 0

Вопрос решён, хотя и не так, как хотелось бы.

 

Надо самому заранее сделать Tile с помощью промежуточного Bitmap-а, примерно так:

   b:=tbitmap.Create;  r:=trect.Create(0,0,b.width,b.Height);

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

 

Далее в цикле налепить исходный битмап на промежуточный.:

while dh > 0 do begin ...

   b.CopyFromBitmap(ish.Bitmap, r, i*ish.Bitmap.Width, j*ish.Bitmap.Height);

   dh:= dh-ish.Bitmap.Height;...

... (то же с dw)...

И, наконец, присвоить его материалу:

lightmaterialsource1.Texture.Assign(B);

 

И так со всеми частями конструкции.

Процедурка небольшая, но,  по идее, абсолютно ненужная, если бы не глюк.

 

Ссылка на комментарий
  • 0

Вопрос решён, хотя и не так, как хотелось бы.

Надо самому заранее сделать Tile с помощью промежуточного Bitmap-а, примерно так:

b:=tbitmap.Create; r:=trect.Create(0,0,b.width,b.Height);

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

Далее в цикле налепить исходный битмап на промежуточный.:

while dh > 0 do begin ...

b.CopyFromBitmap(ish.Bitmap, r, i*ish.Bitmap.Width, j*ish.Bitmap.Height);

dh:= dh-ish.Bitmap.Height;...

... (то же с dw)...

И, наконец, присвоить его материалу:

lightmaterialsource1.Texture.Assign(B);

И так со всеми частями конструкции.

Процедурка небольшая, но, по идее, абсолютно ненужная, если бы не глюк.

Плохой подход, при достаточно большой требуемой текстуре оно выдаст ошибку. (1024/2048/4096 пикселей по одной из координат скорее всего, т.к. сильно зависит от видеокарты)
Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...