Процедурная текстура и её бинд.

Версия Minecraft
1.12.2
3,836
57
500
Собственно, вопрос в названии...
Какой класс лучше использовать для создания процедурной текстуры и как её потом биндить?
 
5,448
182
1,009
Процедурной - это какой? Если нужна динамически собираемая текстура - посмотри Draco18s/HarderStuff
 
5,448
182
1,009
Да не важно, откуда цвета пикселей берутся
1553371544991.png
 
5,448
182
1,009
Ага, пишешь свою реализацию, потом юзаешь ее при создании квадов или чего там
 
590
25
107
TextureManager уже используются динамические текстуры, а ещё

Java:
//... всё это лишь куски кода, но думаю разберешься
//выделение памяти с очисткой
private synchronized void freeFrameBuffer() {
        try {
            if (this.texture != 0) GlStateManager.deleteTexture(this.texture);
            this.texture = 0;
        } catch (Exception e) {
            // Just in case, we make sure we don't crash. Because crashing is bad.
            LoggerUtils.error("Error while cleaning up a world view frame buffer.");
        }
    }

    // This method builds the frame buffer and texture references
    private void allocateFrameBuffer() {
        this.texture = GlStateManager.generateTexture(); //Release via: GlStateManager.deleteTexture(colorTexture);
        GlStateManager.bindTexture(this.texture);
        GlStateManager.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
        GlStateManager.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, width, height, 0, GL11.GL_RGBA, GL11.GL_INT, null);
        EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, GL11.GL_TEXTURE_2D, this.texture, 0);

        EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
}

//рисование на текстуре (в текстуру)
//Set gl options       
            GlStateManager.viewport(0, 0, mc.displayWidth, mc.displayHeight);       
            GlStateManager.bindTexture(0);       
            EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, framebuffer);       
            GlStateManager.clearColor(1.0f, 0.0f, 0.0f, 0.5f);       
            GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT);
 
Последнее редактирование:
3,836
57
500
590
25
107
Java:
//int texture...
GlStateManager.bindTexture(this.texture);
 
590
25
107
3,836
57
500
Как-то всё сложно, но нашёл, что это можно сделать через TextureUtil.
Вот так:
Java:
int textureId = GL11.glGenTextures();
TextureUtil.uploadTextureImage(textureId, myBufferedImage);
GlStateManager.bindTexture(textureId);

Но возникает ещё вопрос: это нужно делать каждый кадр или id и его присвоение можно сделать один раз, а дальше просто биндить уже готовый номер?

Итог: опытным путём выяснил, что каждый кадр.
 
Последнее редактирование:
590
25
107
Поэтому лучше делать шейдером или подготовить атлас метаморфозы
 
3,836
57
500
Ну, можно и им... Наверное, даже лучше... Хотя там делается всё то же самое, но автоматически )
Хотя не понятно, как там текстуру менять... Если мне нужно один пиксель, скажем, изменить. А если размер?
Хм... Не... Чё-т не то.
 
Последнее редактирование:
3,836
57
500
590
25
107
К теме это конечно не совсем относится, но если рассмотреть твой экран монитора как динамическую текстуру... то мы приходим к тому, что, динамическая текстура - это всего лишь набор статических, которые принимают ту или иную форму.
 
Сверху