mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 13:28:20 +00:00
Properly working MSAA and SRGB :D
This commit is contained in:
@ -238,7 +238,12 @@ func LoadTextureJpeg(file string, loadOptions *TextureLoadOptions) (Texture, err
|
|||||||
return tex, nil
|
return tex, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadCubemapTextures(rightTex, leftTex, topTex, botTex, frontTex, backTex string) (Cubemap, error) {
|
// LoadCubemapTextures only supports the 'TextureIsSrgba' option
|
||||||
|
func LoadCubemapTextures(rightTex, leftTex, topTex, botTex, frontTex, backTex string, loadOptions *TextureLoadOptions) (Cubemap, error) {
|
||||||
|
|
||||||
|
if loadOptions == nil {
|
||||||
|
loadOptions = &TextureLoadOptions{}
|
||||||
|
}
|
||||||
|
|
||||||
var imgDecoder func(r io.Reader) (image.Image, error)
|
var imgDecoder func(r io.Reader) (image.Image, error)
|
||||||
ext := strings.ToLower(path.Ext(rightTex))
|
ext := strings.ToLower(path.Ext(rightTex))
|
||||||
@ -283,7 +288,12 @@ func LoadCubemapTextures(rightTex, leftTex, topTex, botTex, frontTex, backTex st
|
|||||||
height := int32(nrgbaImg.Bounds().Dy())
|
height := int32(nrgbaImg.Bounds().Dy())
|
||||||
width := int32(nrgbaImg.Bounds().Dx())
|
width := int32(nrgbaImg.Bounds().Dx())
|
||||||
|
|
||||||
gl.TexImage2D(uint32(gl.TEXTURE_CUBE_MAP_POSITIVE_X)+i, 0, gl.RGBA8, int32(width), int32(height), 0, gl.RGBA, gl.UNSIGNED_BYTE, unsafe.Pointer(&nrgbaImg.Pix[0]))
|
internalFormat := int32(gl.RGBA8)
|
||||||
|
if loadOptions.TextureIsSrgba {
|
||||||
|
internalFormat = gl.SRGB_ALPHA
|
||||||
|
}
|
||||||
|
|
||||||
|
gl.TexImage2D(uint32(gl.TEXTURE_CUBE_MAP_POSITIVE_X)+i, 0, internalFormat, int32(width), int32(height), 0, gl.RGBA, gl.UNSIGNED_BYTE, unsafe.Pointer(&nrgbaImg.Pix[0]))
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the texture wrapping/filtering options (on the currently bound texture object)
|
// set the texture wrapping/filtering options (on the currently bound texture object)
|
||||||
|
|||||||
@ -133,17 +133,20 @@ func initSDL() error {
|
|||||||
sdl.GLSetAttribute(sdl.MAJOR_VERSION, 4)
|
sdl.GLSetAttribute(sdl.MAJOR_VERSION, 4)
|
||||||
sdl.GLSetAttribute(sdl.MINOR_VERSION, 1)
|
sdl.GLSetAttribute(sdl.MINOR_VERSION, 1)
|
||||||
|
|
||||||
// R(0-255) G(0-255) B(0-255)
|
|
||||||
sdl.GLSetAttribute(sdl.GL_RED_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_RED_SIZE, 8)
|
||||||
sdl.GLSetAttribute(sdl.GL_GREEN_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_GREEN_SIZE, 8)
|
||||||
sdl.GLSetAttribute(sdl.GL_BLUE_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_BLUE_SIZE, 8)
|
||||||
|
sdl.GLSetAttribute(sdl.GL_ALPHA_SIZE, 8)
|
||||||
|
|
||||||
sdl.GLSetAttribute(sdl.GL_DOUBLEBUFFER, 1)
|
sdl.GLSetAttribute(sdl.GL_DOUBLEBUFFER, 1)
|
||||||
sdl.GLSetAttribute(sdl.GL_DEPTH_SIZE, 24)
|
sdl.GLSetAttribute(sdl.GL_DEPTH_SIZE, 24)
|
||||||
sdl.GLSetAttribute(sdl.GL_STENCIL_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_STENCIL_SIZE, 8)
|
||||||
|
|
||||||
// Allow us to do MSAA
|
sdl.GLSetAttribute(sdl.GL_FRAMEBUFFER_SRGB_CAPABLE, 1)
|
||||||
sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 8)
|
|
||||||
|
// Allows us to do MSAA
|
||||||
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1)
|
||||||
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4)
|
||||||
|
|
||||||
sdl.GLSetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_CORE)
|
sdl.GLSetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_CORE)
|
||||||
|
|
||||||
@ -155,16 +158,12 @@ func CreateOpenGLWindow(title string, x, y, width, height int32, flags WindowFla
|
|||||||
}
|
}
|
||||||
|
|
||||||
func CreateOpenGLWindowCentered(title string, width, height int32, flags WindowFlags, rend renderer.Render) (*Window, error) {
|
func CreateOpenGLWindowCentered(title string, width, height int32, flags WindowFlags, rend renderer.Render) (*Window, error) {
|
||||||
return createWindow(title, -1, -1, width, height, WindowFlags_OPENGL|flags, rend)
|
return createWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, width, height, WindowFlags_OPENGL|flags, rend)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createWindow(title string, x, y, width, height int32, flags WindowFlags, rend renderer.Render) (*Window, error) {
|
func createWindow(title string, x, y, width, height int32, flags WindowFlags, rend renderer.Render) (*Window, error) {
|
||||||
|
|
||||||
assert.T(isInited, "engine.Init was not called!")
|
assert.T(isInited, "engine.Init() was not called!")
|
||||||
if x == -1 && y == -1 {
|
|
||||||
x = sdl.WINDOWPOS_CENTERED
|
|
||||||
y = sdl.WINDOWPOS_CENTERED
|
|
||||||
}
|
|
||||||
|
|
||||||
sdlWin, err := sdl.CreateWindow(title, x, y, width, height, uint32(flags))
|
sdlWin, err := sdl.CreateWindow(title, x, y, width, height, uint32(flags))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
5
main.go
5
main.go
@ -147,7 +147,7 @@ func main() {
|
|||||||
|
|
||||||
game := &OurGame{
|
game := &OurGame{
|
||||||
Win: window,
|
Win: window,
|
||||||
ImGUIInfo: nmageimgui.NewImGui(),
|
ImGUIInfo: nmageimgui.NewImGui("./res/shaders/imgui.glsl"),
|
||||||
}
|
}
|
||||||
window.EventCallbacks = append(window.EventCallbacks, game.handleWindowEvents)
|
window.EventCallbacks = append(window.EventCallbacks, game.handleWindowEvents)
|
||||||
|
|
||||||
@ -231,7 +231,7 @@ func (g *OurGame) Init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Load textures
|
//Load textures
|
||||||
tex, err := assets.LoadTexturePNG("./res/textures/pallete-endesga-64-1x.png", nil)
|
tex, err := assets.LoadTexturePNG("./res/textures/pallete-endesga-64-1x.png", &assets.TextureLoadOptions{TextureIsSrgba: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.ErrLog.Fatalln("Failed to load texture. Err: ", err)
|
logging.ErrLog.Fatalln("Failed to load texture. Err: ", err)
|
||||||
}
|
}
|
||||||
@ -240,6 +240,7 @@ func (g *OurGame) Init() {
|
|||||||
"./res/textures/sb-right.jpg", "./res/textures/sb-left.jpg",
|
"./res/textures/sb-right.jpg", "./res/textures/sb-left.jpg",
|
||||||
"./res/textures/sb-top.jpg", "./res/textures/sb-bottom.jpg",
|
"./res/textures/sb-top.jpg", "./res/textures/sb-bottom.jpg",
|
||||||
"./res/textures/sb-front.jpg", "./res/textures/sb-back.jpg",
|
"./res/textures/sb-front.jpg", "./res/textures/sb-back.jpg",
|
||||||
|
&assets.TextureLoadOptions{TextureIsSrgba: true},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.ErrLog.Fatalln("Failed to load cubemap. Err: ", err)
|
logging.ErrLog.Fatalln("Failed to load cubemap. Err: ", err)
|
||||||
|
|||||||
33
res/shaders/imgui.glsl
Executable file
33
res/shaders/imgui.glsl
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
//shader:vertex
|
||||||
|
#version 410
|
||||||
|
|
||||||
|
uniform mat4 ProjMtx;
|
||||||
|
|
||||||
|
in vec2 Position;
|
||||||
|
in vec2 UV;
|
||||||
|
in vec4 Color;
|
||||||
|
|
||||||
|
out vec2 Frag_UV;
|
||||||
|
out vec4 Frag_Color;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
Frag_UV = UV;
|
||||||
|
Frag_Color = Color;
|
||||||
|
gl_Position = ProjMtx * vec4(Position.xy, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//shader:fragment
|
||||||
|
#version 410
|
||||||
|
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
|
||||||
|
in vec2 Frag_UV;
|
||||||
|
in vec4 Frag_Color;
|
||||||
|
|
||||||
|
out vec4 Out_Color;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
Out_Color = vec4(Frag_Color.rgb, Frag_Color.a * texture(Texture, Frag_UV.st).r);
|
||||||
|
}
|
||||||
@ -147,7 +147,7 @@ func (i *ImguiInfo) AddFontTTF(fontPath string, fontSize float32, fontConfig *im
|
|||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
const imguiShdrSrc = `
|
const DefaultImguiShader = `
|
||||||
//shader:vertex
|
//shader:vertex
|
||||||
#version 410
|
#version 410
|
||||||
|
|
||||||
@ -183,11 +183,20 @@ void main()
|
|||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
func NewImGui() ImguiInfo {
|
// NewImGui setups imgui using the passed shader.
|
||||||
|
// If the path is empty a default nMage shader is used
|
||||||
|
func NewImGui(shaderPath string) ImguiInfo {
|
||||||
|
|
||||||
|
var imguiMat *materials.Material
|
||||||
|
if shaderPath == "" {
|
||||||
|
imguiMat = materials.NewMaterialSrc("ImGUI Mat", []byte(DefaultImguiShader))
|
||||||
|
} else {
|
||||||
|
imguiMat = materials.NewMaterial("ImGUI Mat", shaderPath)
|
||||||
|
}
|
||||||
|
|
||||||
imguiInfo := ImguiInfo{
|
imguiInfo := ImguiInfo{
|
||||||
ImCtx: imgui.CreateContext(),
|
ImCtx: imgui.CreateContext(),
|
||||||
Mat: materials.NewMaterialSrc("ImGUI Mat", []byte(imguiShdrSrc)),
|
Mat: imguiMat,
|
||||||
}
|
}
|
||||||
|
|
||||||
io := imgui.CurrentIO()
|
io := imgui.CurrentIO()
|
||||||
|
|||||||
Reference in New Issue
Block a user