本文整理汇总了Golang中github.com/go-gl/gl.TexParameteri函数的典型用法代码示例。如果您正苦于以下问题:Golang TexParameteri函数的具体用法?Golang TexParameteri怎么用?Golang TexParameteri使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了TexParameteri函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: NewFramebuffer
// Creates a new Framebuffer.
func NewFramebuffer(w int, h int) (fb *Framebuffer, err error) {
var (
buffer gl.Framebuffer
texture gl.Texture
)
buffer = gl.GenFramebuffer()
buffer.Bind()
texture = gl.GenTexture()
texture.Bind(gl.TEXTURE_2D)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, nil)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.FramebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)
gl.DrawBuffer(gl.COLOR_ATTACHMENT0)
if gl.CheckFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE {
err = fmt.Errorf("Framebuffer could not be set up")
return
}
fb = &Framebuffer{
Buffer: buffer,
Texture: texture,
Width: w,
Height: h,
}
return
}
开发者ID:pikkpoiss,项目名称:ld27,代码行数:27,代码来源:framebuffer.go
示例2: Commit
// Commit creates the actual texture from the atlas image data.
// This should be called after all regions have been defined and set,
// and before you start using the texture for display.
func (a *TextureAtlas) Commit(target gl.GLenum) {
gl.PushAttrib(gl.CURRENT_BIT | gl.ENABLE_BIT)
gl.Enable(target)
a.texture.Bind(target)
gl.TexParameteri(target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
gl.TexParameteri(target, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(target, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
switch a.depth {
case 4:
gl.TexImage2D(target, 0, gl.RGBA, a.width, a.height,
0, gl.RGBA, gl.UNSIGNED_BYTE, a.data)
case 3:
gl.TexImage2D(target, 0, gl.RGB, a.width, a.height,
0, gl.RGB, gl.UNSIGNED_BYTE, a.data)
case 1:
gl.TexImage2D(target, 0, gl.ALPHA, a.width, a.height,
0, gl.ALPHA, gl.UNSIGNED_BYTE, a.data)
}
gl.PopAttrib()
}
开发者ID:jasonrpowers,项目名称:glh,代码行数:30,代码来源:atlas.go
示例3: loadFont
// loadFont loads the given font data. This does not deal with font scaling.
// Scaling should be handled by the independent Bitmap/Truetype loaders.
// We therefore expect the supplied image and charset to already be adjusted
// to the correct font scale.
//
// The image should hold a sprite sheet, defining the graphical layout for
// every glyph. The config describes font metadata.
func loadFont(img *image.RGBA, config *FontConfig) (f *Font, err error) {
f = new(Font)
f.Config = config
// Resize image to next power-of-two.
img = glh.Pow2Image(img).(*image.RGBA)
ib := img.Bounds()
f.Width = ib.Dx()
f.Height = ib.Dy()
// Create the texture itself. It will contain all glyphs.
// Individual glyph-quads display a subset of this texture.
f.Texture = gl.GenTexture()
f.Texture.Bind(gl.TEXTURE_2D)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, ib.Dx(), ib.Dy(), 0,
gl.RGBA, gl.UNSIGNED_BYTE, img.Pix)
// file, err := os.Create("font.png")
// if err != nil {
// log.Fatal(err)
// }
// err = png.Encode(file, img)
// if err != nil {
// log.Fatal(err)
// }
return
}
开发者ID:nobonobo,项目名称:gltext,代码行数:39,代码来源:font.go
示例4: loadTextures
func loadTextures() (err error) {
textures = make([]gl.Texture, len(texturefiles)) ///创建文件存储空间数组
gl.GenTextures(textures) ///告诉OpenGL我们想生成一个纹理名字
for i := range texturefiles {
///告诉OpenGL将纹理名字 texture[0] 绑定到纹理目标上。
///2D纹理只有高度(在 Y 轴上)和宽度(在 X 轴上)。主函数将纹理名字指派给纹理数据。
///本例中我们告知OpenGL, texture[i] 处的内存已经可用。我们创建的纹理将存储在 texture[i] 的 指向的内存区域。
textures[i].Bind(gl.TEXTURE_2D) ///绑定
if !glfw.LoadTexture2D(texturefiles[i], 0) { ///加载图片
return errors.New("Failed to load texture: " + texturefiles[i])
}
/*
下面的两行告诉OpenGL在显示图像时,当它比放大得原始的纹理大 ( GL_TEXTURE_MAG_FILTER )
或缩小得比原始得纹理小( GL_TEXTURE_MIN_FILTER )时OpenGL采用的滤波方式。
通常这两种情况下我都采用 GL_LINEAR 。这使得纹理从很远处到离屏幕很近时都平滑显示。
使用 GL_LINEAR 需要CPU和显卡做更多的运算。如果您的机器很慢,您也许应该采用 GL_NEAREST 。
过滤的纹理在放大的时候,看起来斑驳的很『译者注:马赛克啦』。您也可以结合这两种滤波方式。
在近处时使用 GL_LINEAR ,远处时 GL_NEAREST 。
*/
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR) ///线形滤波
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) ///线形滤波
}
return
}
开发者ID:bonly,项目名称:exercise,代码行数:25,代码来源:20110517_nehe06.go
示例5: Options
func (t *Texture) Options(filter, clamp int) {
t.Bind()
gl.TexParameteri(t.target, gl.TEXTURE_MIN_FILTER, filter)
gl.TexParameteri(t.target, gl.TEXTURE_MAG_FILTER, filter)
gl.TexParameteri(t.target, gl.TEXTURE_WRAP_S, clamp)
gl.TexParameteri(t.target, gl.TEXTURE_WRAP_T, clamp)
}
开发者ID:gulinfang,项目名称:GarageEngine,代码行数:7,代码来源:Texture.go
示例6: NewTexture
// Create a new texture, initialize it to have a `gl.LINEAR` filter and use
// `gl.CLAMP_TO_EDGE`.
func NewTexture(w, h int) *Texture {
texture := &Texture{gl.GenTexture(), w, h}
With(texture, func() {
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE)
})
return texture
}
开发者ID:andrebq,项目名称:glh,代码行数:13,代码来源:texture.go
示例7: getGLTexture
func getGLTexture(img image.Image, smoothing int) (gltexture gl.Texture, err error) {
var data *bytes.Buffer
if data, err = encodeTGA("texture", img); err != nil {
return
}
gltexture = gl.GenTexture()
gltexture.Bind(gl.TEXTURE_2D)
if !glfw.LoadMemoryTexture2D(data.Bytes(), 0) {
err = fmt.Errorf("Failed to load texture")
return
}
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, smoothing)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, smoothing)
return
}
开发者ID:pikkpoiss,项目名称:ld27,代码行数:15,代码来源:texture.go
示例8: MakeTextureFromTGA
func MakeTextureFromTGA(fname string) gl.Texture {
tex := gl.GenTexture()
tex.Bind(gl.TEXTURE_2D)
glfw.LoadTexture2D(fname, 0)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR)
gl.GenerateMipmap(gl.TEXTURE_2D)
// glh.OpenGLSentinel() // check for errors
return tex
}
开发者ID:GlenKelley,项目名称:mathgl,代码行数:16,代码来源:helper_windows.go
示例9: LoadTexture
func (self *OpenGLRenderer) LoadTexture(texture *render.Texture) gl.Texture {
glTexture := gl.GenTexture()
glTexture.Bind(gl.TEXTURE_2D)
defer glTexture.Unbind(gl.TEXTURE_2D)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR)
self.glTexImage2D(gl.TEXTURE_2D, texture)
gl.GenerateMipmap(gl.TEXTURE_2D)
return glTexture
}
开发者ID:jasonroelofs,项目名称:slartibartfast,代码行数:16,代码来源:opengl_renderer.go
示例10: loadTextures
func loadTextures() (err error) {
textures = make([]gl.Texture, len(texturefiles))
gl.GenTextures(textures)
for i := range texturefiles {
textures[i].Bind(gl.TEXTURE_2D)
if !glfw.LoadTexture2D(texturefiles[i], 0) {
return errors.New("Failed to load texture: " + texturefiles[i])
}
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
}
return
}
开发者ID:hsalokor,项目名称:examples,代码行数:17,代码来源:main.go
示例11: Render
func (v *Video) Render() {
for running {
select {
case dimensions := <-v.resize:
v.ResizeEvent(dimensions[0], dimensions[1])
case val := <-v.tick:
slice := make([]uint8, len(val)*3)
for i := 0; i < len(val); i = i + 1 {
slice[i*3+0] = (uint8)((val[i] >> 16) & 0xff)
slice[i*3+1] = (uint8)((val[i] >> 8) & 0xff)
slice[i*3+2] = (uint8)((val[i]) & 0xff)
}
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
v.tex.Bind(gl.TEXTURE_2D)
if ppu.OverscanEnabled {
gl.TexImage2D(gl.TEXTURE_2D, 0, 3, 240, 224, 0, gl.RGB, gl.UNSIGNED_BYTE, slice)
} else {
gl.TexImage2D(gl.TEXTURE_2D, 0, 3, 256, 240, 0, gl.RGB, gl.UNSIGNED_BYTE, slice)
}
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
gl.Begin(gl.QUADS)
gl.TexCoord2f(0.0, 1.0)
gl.Vertex3f(-1.0, -1.0, 0.0)
gl.TexCoord2f(1.0, 1.0)
gl.Vertex3f(1.0, -1.0, 0.0)
gl.TexCoord2f(1.0, 0.0)
gl.Vertex3f(1.0, 1.0, 0.0)
gl.TexCoord2f(0.0, 0.0)
gl.Vertex3f(-1.0, 1.0, 0.0)
gl.End()
if v.screen != nil {
sdl.GL_SwapBuffers()
}
v.frametick <- true
}
}
}
开发者ID:richardjoo,项目名称:Fergulator,代码行数:45,代码来源:video.go
示例12: uploadTexture_RGBA32
func uploadTexture_RGBA32(w, h int, data []byte) gl.Texture {
id := gl.GenTexture()
id.Bind(gl.TEXTURE_2D)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, int(w), int(h), 0, gl.RGBA, gl.UNSIGNED_BYTE, data)
if gl.GetError() != gl.NO_ERROR {
id.Delete()
panic("Failed to load a texture")
return 0
}
return id
}
开发者ID:jayschwa,项目名称:examples,代码行数:18,代码来源:main.go
示例13: loadTextures
func loadTextures() (err error) {
gl.GenTextures(textures)
// Texture 1
textures[0].Bind(gl.TEXTURE_2D)
if !glfw.LoadTexture2D(texturefiles[0], 0) {
return errors.New("Failed to load texture: " + texturefiles[0])
}
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
// Texture 2
textures[1].Bind(gl.TEXTURE_2D)
if !glfw.LoadTexture2D(texturefiles[0], 0) {
return errors.New("Failed to load texture: " + texturefiles[0])
}
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
// Texture 3
textures[2].Bind(gl.TEXTURE_2D)
if !glfw.LoadTexture2D(texturefiles[0], glfw.BuildMipmapsBit) {
return errors.New("Failed to load texture: " + texturefiles[0])
}
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR_MIPMAP_NEAREST)
return
}
开发者ID:pwaller,项目名称:examples,代码行数:35,代码来源:main.go
示例14: Render
func (v *Video) Render(frame []byte, frame_w int, frame_h int) {
gl.Clear(gl.COLOR_BUFFER_BIT)
v.Texture.Bind(gl.TEXTURE_2D)
gl.TexImage2D(gl.TEXTURE_2D, 0, 3, frame_w, frame_h, 0, gl.RGB, gl.UNSIGNED_BYTE, frame)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
gl.Begin(gl.QUADS)
gl.TexCoord2f(0.0, 1.0)
gl.Vertex3f(-1.0, -1.0, 0.0)
gl.TexCoord2f(1.0, 1.0)
gl.Vertex3f(1.0, -1.0, 0.0)
gl.TexCoord2f(1.0, 0.0)
gl.Vertex3f(1.0, 1.0, 0.0)
gl.TexCoord2f(0.0, 0.0)
gl.Vertex3f(-1.0, 1.0, 0.0)
gl.End()
glfw.SwapBuffers()
}
开发者ID:samfoo,项目名称:gones,代码行数:22,代码来源:video.go
示例15: loadCubeMap
func (self *OpenGLRenderer) loadCubeMap(material *render.Material) gl.Texture {
glTexture := gl.GenTexture()
glTexture.Bind(gl.TEXTURE_CUBE_MAP)
defer glTexture.Unbind(gl.TEXTURE_CUBE_MAP)
gl.TexParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE)
self.glTexImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X, material.CubeMap[render.CubeFace_Right])
self.glTexImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_X, material.CubeMap[render.CubeFace_Left])
self.glTexImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_Y, material.CubeMap[render.CubeFace_Top])
self.glTexImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, material.CubeMap[render.CubeFace_Bottom])
self.glTexImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_Z, material.CubeMap[render.CubeFace_Front])
self.glTexImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, material.CubeMap[render.CubeFace_Back])
return glTexture
}
开发者ID:jasonroelofs,项目名称:slartibartfast,代码行数:22,代码来源:opengl_renderer.go
示例16: bind
// bind the given atlas to the current GL context
//
// the current implementation is very stupid, since it will
// upload the texture every single call.
//
// later, improve this to upload only if there is a real need for it
func (a *Atlas) bind() error {
// discard any possible error
if err := checkGlError(); err != nil {
return err
}
if gl.Object(a.gltex).IsTexture() {
a.gltex = gl.GenTexture()
}
a.gltex.Bind(gl.TEXTURE_2D)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, a.data.Bounds().Dx(), a.data.Bounds().Dy(), 0, gl.RGBA, gl.UNSIGNED_BYTE, a.data.Pix)
if err := checkGlError(gl.OUT_OF_MEMORY, gl.INVALID_OPERATION); err != nil {
return err
}
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR)
gl.GenerateMipmap(gl.TEXTURE_2D)
panicGlError()
return nil
}
开发者ID:andrebq,项目名称:exp,代码行数:28,代码来源:atlas.go
示例17: pack
// Packs image into a texture of size * size dimensions
func (i *ImagePacker) pack(size int) (SpriteSheet, error) {
rootNode := newNode(size, size)
for v, img := range i.images {
err := rootNode.recInsert(img.w, img.h, v)
if err != nil {
return SpriteSheet{}, err
}
}
nodeImage := image.NewRGBA(image.Rect(0, 0, size, size))
traverseNodes(rootNode, func(nd node) {
draw.Draw(nodeImage, image.Rect(nd.rc.left, nd.rc.top, nd.rc.right, nd.rc.bottom), i.images[nd.id].image, image.ZP, draw.Src)
i.sprites[nd.id].left = float32(nd.rc.left) / float32(size)
i.sprites[nd.id].top = float32(nd.rc.bottom) / float32(size)
i.sprites[nd.id].right = float32(nd.rc.right) / float32(size)
i.sprites[nd.id].bottom = float32(nd.rc.top) / float32(size)
i.sprites[nd.id].W = float32(nd.rc.right - nd.rc.left)
i.sprites[nd.id].H = float32(nd.rc.bottom - nd.rc.top)
})
texture := gl.GenTexture()
texture.Bind(gl.TEXTURE_2D)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size, size, 0, gl.RGBA, gl.UNSIGNED_BYTE, nodeImage.Pix)
texture.Unbind(gl.TEXTURE_2D)
spriteSheet := NewSpriteSheet(texture, size, size)
return spriteSheet, nil
}
开发者ID:akovaski,项目名称:glSpriteSheet,代码行数:40,代码来源:ImagePacker.go
示例18: LoadTexture
func LoadTexture(filename string) gl.Texture {
r, err := os.Open(filename)
if err != nil {
fmt.Fprintf(os.Stderr, "[e] %v\n", err)
return 0
}
defer r.Close()
img, _, err := image.Decode(r)
if err != nil {
fmt.Fprintf(os.Stderr, "[e] %v\n", err)
return 0
}
// lazy way to ensure we have the correct image format for opengl
rgbaImg := image.NewNRGBA(img.Bounds())
draw.Draw(rgbaImg, img.Bounds(), img, image.ZP, draw.Src)
tex := gl.GenTexture()
tex.Bind(gl.TEXTURE_2D)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
// flip image: first pixel is lower left corner
w, h := img.Bounds().Dx(), img.Bounds().Dy()
data := make([]byte, w*h*4)
lineLen := w * 4
dest := len(data) - lineLen
for src := 0; src < len(rgbaImg.Pix); src += rgbaImg.Stride {
copy(data[dest:dest+lineLen], rgbaImg.Pix[src:src+rgbaImg.Stride])
dest -= lineLen
}
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, data)
return tex
}
开发者ID:samnm,项目名称:goblocks,代码行数:38,代码来源:utils.go
示例19: initGL
func (video *SDLVideo) initGL() {
if gl.Init() != 0 {
panic(sdl.GetError())
}
gl.ClearColor(0.0, 0.0, 0.0, 1.0)
gl.Enable(gl.CULL_FACE)
gl.Enable(gl.DEPTH_TEST)
video.prog = createProgram(vertShaderSrcDef, fragShaderSrcDef)
posAttrib := video.prog.GetAttribLocation("vPosition")
texCoordAttr := video.prog.GetAttribLocation("vTexCoord")
video.textureUni = video.prog.GetAttribLocation("texture")
video.texture = gl.GenTexture()
gl.ActiveTexture(gl.TEXTURE0)
video.texture.Bind(gl.TEXTURE_2D)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
video.prog.Use()
posAttrib.EnableArray()
texCoordAttr.EnableArray()
vertVBO := gl.GenBuffer()
vertVBO.Bind(gl.ARRAY_BUFFER)
verts := []float32{-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0}
gl.BufferData(gl.ARRAY_BUFFER, len(verts)*int(unsafe.Sizeof(verts[0])), &verts[0], gl.STATIC_DRAW)
textCoorBuf := gl.GenBuffer()
textCoorBuf.Bind(gl.ARRAY_BUFFER)
texVerts := []float32{0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0}
gl.BufferData(gl.ARRAY_BUFFER, len(texVerts)*int(unsafe.Sizeof(texVerts[0])), &texVerts[0], gl.STATIC_DRAW)
posAttrib.AttribPointer(2, gl.FLOAT, false, 0, uintptr(0))
texCoordAttr.AttribPointer(2, gl.FLOAT, false, 0, uintptr(0))
}
开发者ID:nwidger,项目名称:nintengo,代码行数:38,代码来源:sdl_video.go
示例20: loadTextures
func loadTextures() (err error) {
gl.GenTextures(textures) //申请纹理处理
// Texture 1
textures[0].Bind(gl.TEXTURE_2D) //绑定将处理的纹理
if !glfw.LoadTexture2D(texturefiles[0], 0) { //加载纹理
return errors.New("Failed to load texture: " + texturefiles[0])
}
/*
LINEAR线性滤波的纹理贴图。这需要机器有相当高的处理能力,但它们看起来很不错。
我们接着要创建的第一种纹理使用 GL_NEAREST方式。从原理上讲,这种方式没有真正进行滤波。
它只占用很小的处理能力,看起来也很差。唯一的好处是这样我们的工程在很快和很慢的机器上都可以正常运行。
您会注意到我们在 MIN 和 MAG 时都采用了GL_NEAREST,你可以混合使用 GL_NEAREST 和 GL_LINEAR。
纹理看起来效果会好些,但我们更关心速度,所以全采用低质量贴图。MIN_FILTER在图像绘制时小于贴图的原始尺寸时采用。
MAG_FILTER在图像绘制时大于贴图的原始尺寸时采用。
*/
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST) //小于原始尺寸时用NEAREST处理
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST) //大于原始尺寸时用NEAREST处理
// Texture 2
textures[1].Bind(gl.TEXTURE_2D) //绑定第二个纹理
if !glfw.LoadTexture2D(texturefiles[0], 0) { //加载纹理
return errors.New("Failed to load texture: " + texturefiles[0])
}
//纹理缩放时采用的处理方式
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
/*
当图像在屏幕上变得很小的时候,很多细节将会丢失。刚才还很不错的图案变得很难看。
当您告诉OpenGL创建一个 mipmapped的纹理后,OpenGL将尝试创建不同尺寸的高质量纹理。
当您向屏幕绘制一个 mipmapped纹理的时候,OpenGL将选择它已经创建的外观最佳的纹理(带有更多细节)来绘制,而不仅仅是缩放原先的图像(这将导致细节丢失)。
我曾经说过有办法可以绕过OpenGL对纹理宽度和高度所加的限制——64、128、256,等等。
办法就是 gluBuild2DMipmaps。据我的发现,您可以使用任意的位图来创建纹理。OpenGL将自动将它缩放到正常的大小。
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
使用三种颜色(红,绿,蓝)来生成一个2D纹理。
TextureImage[0]->sizeX 是位图宽度,extureImage[0]->sizeY 是位图高度,GL_RGB意味着我们依次使用RGB色彩。
GL_UNSIGNED_BYTE 意味着纹理数据的单位是字节。TextureImage[0]->data指向我们创建纹理所用的位图。
*/
// Texture 3
textures[2].Bind(gl.TEXTURE_2D) //绑定处理第三个纹理
if !glfw.LoadTexture2D(texturefiles[0], glfw.BuildMipmapsBit) { //加载纹理
return errors.New("Failed to load texture: " + texturefiles[0])
}
//指定缩放处理方式
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR_MIPMAP_NEAREST) //golang用这个方式自动处理gluBuild2DMipmaps?
return
}
开发者ID:bonly,项目名称:exercise,代码行数:55,代码来源:20110518_nehe07.go
注:本文中的github.com/go-gl/gl.TexParameteri函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论