Я новичок в opengl, и я изо всех сил пытаюсь заставить stencilbuffer работать для простого случая; У меня есть две текстуры, одна из которых является растровой, а одна - «маской», с которой я пытаюсь скрыть некоторые части из растрового изображения.Буфер трафарета OpenTK
Я не могу заставить это работать, когда я пытаюсь установить формат трафарета при создании моей текстуры трафарета с использованием GL.TexImage2D. Я получаю недопустимое перечисление, и когда я пытаюсь прикрепить stencilextension к FramebufferTexture2D для FBO Я рисую свою маску:
GL.Enable(EnableCap.StencilTest);
GL.ClearStencil(0);
GL.StencilMask(0xFFFFFFFF); // read&write
// Create stencil texture
GL.GenTextures(1, out stencilTexture);
GL.BindTexture(TextureTarget.Texture2D, stencilTexture);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba8, stencilTextureWidth, stencilTextureHeight, 0, OpenTK.Graphics.OpenGL.PixelFormat.Rgba, PixelType.UnsignedByte, IntPtr.Zero);
//DOES NOT WORK: GL.TexImage2D(TextureTarget.Texture2D, 0, (PixelInternalFormat)All.StencilIndex, stencilTextureWidth, stencilTextureHeight, 0, OpenTK.Graphics.OpenGL.PixelFormat.StencilIndex, PixelType.UnsignedByte, IntPtr.Zero);
CREATE COLORTEXTURE FROM BITMAP
// Create a FBO and attach the stencil texture
GL.Ext.GenFramebuffers(1, out fbo);
GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, fbo);
GL.Ext.FramebufferTexture2D(FramebufferTarget.FramebufferExt, FramebufferAttachment.ColorAttachment0Ext, TextureTarget.Texture2D, stencilTexture, 0);
//DOES NOT WORK?: GL.Ext.FramebufferTexture2D(FramebufferTarget.FramebufferExt, FramebufferAttachment.StencilAttachmentExt, TextureTarget.Texture2D, stencilTexture, 0);
DRAW SOME STUFF INTO THE STENCILTEXTURE TO FUNCTION AS A MASK
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.StencilBufferBit);
DRAW COLOR TEXTURE
GL.Enable(EnableCap.StencilTest);
GL.ClearStencil(0);
GL.ColorMask(false, false, false, false);
GL.StencilFunc(StencilFunction.Always, 1, 1);
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Replace);
DRAW THE STENCIL TEXTURE
GL.Disable(EnableCap.StencilTest);
Я не могу найти какие-либо примеры, демонстрирующие это для простого 2d случая (маскирований текстур, используя текстуру).
EDIT: Обновленная версия здесь: http://pastebin.com/iuur2UTM
Это очень много кода. Можете ли вы сделать проблему более конкретной? –
Извините, я представил весь пример, чтобы он мог закончиться из коробки, так как я не уверен, где проблема ... Я редактировал исходное сообщение, чтобы включать только соответствующие части и связывать полный исходный код, который должен компилироваться , – Martijnh
Зачем голосовать за него, просто потому, что он предоставил много кода? Прочитав здесь много вопросов, хорошо видеть, как люди уделяют время и силы своим вопросам и предоставляют то, что у них есть. Найти правильный ответ. Ненавижу добавить комментарий, который всегда читается как «пожалуйста, напишите свой метод рисования» и т. Д. Это не вопрос, стоящий на минусе. – dowhilefor