Awesome Open Source
Awesome Open Source
Sponsorship

gli

Build Status license Release Size Github All Releases Awesome Kotlin Badge

This is the Kotlin port of the original OpenGL Image (GLI), written by g-truc (repository), a header only C++ image library for graphics software.

GLI provides classes and functions to load image files, facilitate graphics APIs texture creation, compare textures, access texture texels, sample textures, convert textures, generate mipmaps, etc.

This library works perfectly with OpenGL or Vulkan but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterization), image processing, image based software testing or any development context that requires a simple and convenient image library.

Don't hesitate to contribute to the project by submitting issues or pull requests for bugs and features. Any feedback is welcome at [email protected].

Kotlin:

import gli_.gli

fun createTexture(filename: String): Int {

    val texture = gli.load(filename)
    if(texture.empty())
        return 0

    gli.gl.profile = gl.Profile.GL33
    val format = gli.gl.translate(texture.format, texture.swizzles)
    val target = gli.gl.translate(texture.target)
    assert(texture.format.isCompressed && target == gl.Target._2D)

    val textureName = intBufferBig(1)
    glGenTextures(textureName)
    glBindTexture(target.i, textureName[0])
    glTexParameteri(target.i, GL_TEXTURE_BASE_LEVEL, 0)
    glTexParameteri(target.i, GL_TEXTURE_MAX_LEVEL, texture.levels() - 1)
    val swizzles = intBufferBig(4)
    format.swizzles to swizzles
    glTexParameteriv(target.i, GL_TEXTURE_SWIZZLE_RGBA, swizzles)
    var extent = texture.extent()
    glTexStorage2D(target.i, texture.levels(), format.internal.i, extent.x, extent.y)
    for(level in 0 until texture.levels()) {
        extent = texture.extent(level)
        glCompressedTexSubImage2D(
                target.i, level, 0, 0, extent.x, extent.y,
                format.internal.i, texture.data(0, 0, level))
    }
    val texName = textureName[0]
    textureName.free()
    return texName
}

Kotlin with gl-next:

    fun createTexture(filename: String): Int {

        val texture = gli.load(filename)
        if(texture.empty())
            return 0

        gli.gl.profile = gl.Profile.GL33
        val (target, format) = gli.gl.translate(texture)
        assert(texture.format.isCompressed && target == gl.Target._2D)

        return initTexture2d {
            levels = 0 until texture.levels()
            swizzles = format.swizzles
            storage(texture.levels(), format.internal, texture.extent())
            levels.forEach {
                compressedSubImage(it, texture.extent(it), format.internal, texture.data(0, 0, it))
            }
        }
    }

Java:

public static int createTexture(String filename) {

    Texture texture = gli.load(filename);
    if (texture.empty())
        return 0;

    gli_.gli.gl.setProfile(gl.Profile.GL33);
    gl.Format format = gli_.gli.gl.translate(texture.getFormat(), texture.getSwizzles());
    gl.Target target = gli_.gli.gl.translate(texture.getTarget());
    assert (texture.getFormat().isCompressed() && target == gl.Target._2D);

    IntBuffer textureName = intBufferBig(1);
    glGenTextures(textureName);
    glBindTexture(target.getI(), textureName.get(0));
    glTexParameteri(target.getI(), GL12.GL_TEXTURE_BASE_LEVEL, 0);
    glTexParameteri(target.getI(), GL12.GL_TEXTURE_MAX_LEVEL, texture.levels() - 1);
    IntBuffer swizzles = intBufferBig(4);
    texture.getSwizzles().to(swizzles);
    glTexParameteriv(target.getI(), GL33.GL_TEXTURE_SWIZZLE_RGBA, swizzles);
    Vec3i extent = texture.extent(0);
    glTexStorage2D(target.getI(), texture.levels(), format.getInternal().getI(), extent.x, extent.y);
    for (int level = 0; level < texture.levels(); level++) {
        extent = texture.extent(level);
        glCompressedTexSubImage2D(
            target.getI(), level, 0, 0, extent.x, extent.y,
            format.getInternal().getI(), texture.data(0, 0, level));
    }
    int texName = textureName.get(0);
    MemoryUtil.memFree(textureName);
    return texName
}

Supported Image Formats

  • KTX
  • DDS
  • KMG
  • jpg
  • png
  • gif
  • bmp
  • tga

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
java (29,247) 
kotlin (2,985) 
opengl (427) 
graphics (378) 
texture (42) 
lwjgl (14) 

Find Open Source By Browsing 7,000 Topics Across 59 Categories

Advertising 📦10
All Projects
Application Programming Interfaces 📦124
Applications 📦192
Artificial Intelligence 📦78
Blockchain 📦73
Build Tools 📦113
Cloud Computing 📦80
Code Quality 📦28
Collaboration 📦32
Command Line Interface 📦49
Community 📦83
Companies 📦60
Compilers 📦63
Computer Science 📦80
Configuration Management 📦42
Content Management 📦175
Control Flow 📦213
Data Formats 📦78
Data Processing 📦276
Data Storage 📦135
Economics 📦64
Frameworks 📦215
Games 📦129
Graphics 📦110
Hardware 📦152
Integrated Development Environments 📦49
Learning Resources 📦166
Legal 📦29
Libraries 📦129
Lists Of Projects 📦22
Machine Learning 📦347
Mapping 📦64
Marketing 📦15
Mathematics 📦55
Media 📦239
Messaging 📦98
Networking 📦315
Operating Systems 📦89
Operations 📦121
Package Managers 📦55
Programming Languages 📦245
Runtime Environments 📦100
Science 📦42
Security 📦396
Social Media 📦27
Software Architecture 📦72
Software Development 📦72
Software Performance 📦58
Software Quality 📦133
Text Editors 📦49
Text Processing 📦136
User Interface 📦330
User Interface Components 📦514
Version Control 📦30
Virtualization 📦71
Web Browsers 📦42
Web Servers 📦26
Web User Interface 📦210