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 :
J'ai fait ces modification suivante:Code:
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); } }; //---------------------------------------------------------------------------------------
mes une image blanche s'afficheCode:
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); } }; //---------------------------------------------------------------------------------------
Qui peut me donner une solution ?