Salut,
J'ai un petit probléme avec Les Texture Array.
Dans le code qui suit je veut utilisé les Texture Array c-à-d remplacer la GL_TEXTURE_2D par GL_TEXTURE_2D_ARRAY.
voila le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//---------------------------------------------------------------------------------------
#include <windows.h>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
 
#include <stdio.h>
#include <string>
#include <set>
#include <iostream>
 
class RenderTarget
{
private:
    GLuint _frameBuffer;
    GLuint _renderBuffer;
    GLuint _texture;
 
    int _size;
public:
    virtual ~RenderTarget() {
        glDeleteTextures(1, &_texture);
        glDeleteRenderbuffers(1, &_renderBuffer);
        glDeleteFramebuffers(1, &_frameBuffer);
    }
 
    const int Size() {
        return _size;
    }
 
    void Bind() {
        glViewport(0, 0, _size, _size);
        glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
    }
 
    void Unbind() {
        glBindFramebuffer(GL_FRAMEBUFFER, 0);
    }
 
    GLuint Texture() {
        return _texture;
    }
    GLuint FBO() {
        return _frameBuffer;
    }
 
    RenderTarget(const int size, GLuint wrap = GL_CLAMP_TO_EDGE, GLuint filterParam = GL_LINEAR, GLuint internalFormat = GL_RGBA32F, GLuint type = GL_FLOAT) :
        _size(size)
    {
 
        glGenTextures(1, &_texture);
        glBindTexture(GL_TEXTURE_2D, _texture);
        glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, _size, _size, 0, GL_RGBA, type, NULL);
        static const GLfloat border[] = {2, 2, 2, 2};
        glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, border);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterParam);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterParam);
 
 
        glGenFramebuffers(1, &_frameBuffer);
        glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _texture, 0);
 
        glGenRenderbuffers(1, &_renderBuffer);
        glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _size, _size);
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _renderBuffer);
 
        printf(" FBO dans1 -- %d \n",_frameBuffer);
 
        glBindTexture(GL_TEXTURE_2D, 0);
        glBindRenderbuffer(GL_RENDERBUFFER, 0);
        glBindFramebuffer(GL_FRAMEBUFFER, 0);
    }
};
 
//---------------------------------------------------------------------------------------
J'ai fait ces modification suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//---------------------------------------------------------------------------------------
#include <windows.h>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
 
#include <stdio.h>
#include <string>
#include <set>
#include <iostream>
 
class RenderTarget
{
private:
	GLuint _frameBuffer;
	GLuint _renderBuffer;
	GLuint _texture;
 
	int _size;
public:
	virtual ~RenderTarget() {
		glDeleteTextures(1, &_texture);
		glDeleteRenderbuffers(1, &_renderBuffer);
		glDeleteFramebuffers(1, &_frameBuffer);
	}
 
	const int Size() {
		return _size;
	}
 
	void Bind() {
		glViewport(0, 0, _size, _size);
		glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
	}
 
	void Unbind() {
		glBindFramebuffer(GL_FRAMEBUFFER, 0);
	}
 
	GLuint Texture() {
		return _texture;
	}
	GLuint FBO() {
		return _frameBuffer;
	}
 
	RenderTarget(const int size, GLuint wrap = GL_CLAMP_TO_EDGE, GLuint filterParam = GL_LINEAR, GLuint internalFormat = GL_RGBA32F, GLuint type = GL_FLOAT) :
		_size(size)
	{
glGenTextures(1, &_texture);
		glBindTexture(GL_TEXTURE_2D_ARRAY, _texture);
 
		glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, internalFormat, _size, _size, 1, 0, GL_RGBA, type, NULL);
 
		static const GLfloat border[] = {2, 2, 2,2};
		glTexParameterfv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BORDER_COLOR, borde);
		glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, wrap);
		glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, wrap);
		glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, filterParam);
		glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, filterParam);
 
		glGenFramebuffers(1, &_frameBuffer);
		glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
 
		glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _texture, 0, 0);
 
 
		glGenRenderbuffers(1, &_renderBuffer);
		glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);
		glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _size, _size);
		glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _renderBuffer);
 
 
 
		//////////////////////////////////////////////////////////////
 
 
	}
		glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
		glBindRenderbuffer(GL_RENDERBUFFER, 0);
		glBindFramebuffer(GL_FRAMEBUFFER, 0);
 
	}
};
//---------------------------------------------------------------------------------------
mes une image blanche s'affiche

Qui peut me donner une solution ?