• Stars
    star
    132
  • Rank 274,205 (Top 6 %)
  • Language
    C
  • License
    MIT License
  • Created over 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simple OpenGL Image Library

Simple OpenGL Image Library (SOIL)

Introduction

SOIL is a tiny C library used primarily for uploading textures into OpenGL. It is based on stb_image version 1.16, the public domain code from Sean Barrett (found here). It has been extended to load TGA and DDS files, and to perform common functions needed in loading OpenGL textures. SOIL can also be used to save and load images in a variety of formats.

Installation

With clib:

$ clib install littlstar/soil --save

From source:

$ make
$ make install

Usage

SOIL is meant to be used as a static library (as it's tiny and in the public domain).

Simply #include <SOIL/SOIL.h> in your C or C++ file, link in the static library, and then use any of SOIL's functions. The file <SOIL/SOIL.h contains simple doxygen style documentation. (If you use the static library, no other header files are needed besides SOIL.h)

Features

  • No external dependencies
  • Tiny
  • Cross platform (Windows, *nix, Mac OS X)
  • Public Domain
  • Can load an image file directly into a 2D OpenGL texture
  • Can generate a new texture handle, or reuse one specified
  • Can automatically rescale the image to the next largest power-of-two size
  • Can automatically create MIPmaps
  • Can scale (not simply clamp) the RGB values into the "safe range" for NTSC displays (16 to 235, as recommended here)
  • Can multiply alpha on load (for more correct blending / compositing)
  • Can flip the image vertically
  • Can compress and upload any image as DXT1 or DXT5 (if EXT_texture_compression_s3tc is available), using an internal (very fast!) compressor
  • Can convert the RGB to YCoCg color space (useful with DXT5 compression: see this link from NVIDIA)
  • Will automatically downsize a texture if it is larger than GL_MAX_TEXTURE_SIZE
  • Can directly upload DDS files (DXT1/3/5/uncompressed/cubemap, with or without MIPmaps). Note: directly uploading the compressed DDS image will disable the other options (no flipping, no pre-multiplying alpha, no rescaling, no creation of MIPmaps, no auto-downsizing)
  • Can load rectangluar textures for GUI elements or splash screens (requires GL_ARB/EXT/NV_texture_rectangle)
  • Can decompress images from RAM (e.g. via PhysicsFS or similar) into an OpenGL texture (same features as regular 2D textures, above)
  • Can load cube maps directly into an OpenGL texture (same features as regular 2D textures, above)
  • Can take six image files directly into an OpenGL cube map texture
  • Can take a single image file where width = 6 * height (or vice versa), split it into an OpenGL cube map texture

Readable Image Formats

  • BMP - non-1bpp, non-RLE (from stb_image documentation)
  • PNG - non-interlaced (from stb_image documentation)
  • JPG - JPEG baseline (from stb_image documentation)
  • TGA - greyscale or RGB or RGBA or indexed, uncompressed or RLE
  • DDS - DXT1/2/3/4/5, uncompressed, cubemaps (can't read 3D DDS files yet)
  • PSD - (from stb_image documentation)
  • HDR - converted to LDR, unless loaded with HDR functions (RGBE or RGBdivA or RGBdivA2)

Writeable Image Formats

  • TGA - Greyscale or RGB or RGBA, uncompressed
  • BMP - RGB, uncompressed
  • DDS - RGB as DXT1, or RGBA as DXT5

License

Public Domain

Originally sourced from https://github.com/paralin/soil

More Repositories

1

s3-lambda

Lambda functions over S3 objects with concurrency control (each, map, reduce, filter)
JavaScript
1,068
star
2

hivemind

For creating distributed jobs using AWS Lambda functions
JavaScript
251
star
3

axis360

Axis360 is a panoramic (360 video) rendering engine
HTML
121
star
4

starplate

Lightning fast template and view engine built on top of Incremental DOM and Babel (ES6 Templates + Incremental DOM working together)
JavaScript
68
star
5

ls-psvr-encoder

A simple command line tool to encode your 180 and 360 videos for sideloading with Littlstar's VR Cinema app for PSVR.
JavaScript
63
star
6

slant

Minimal 360 Video Player
JavaScript
18
star
7

docker-docsify

docsify as a docker (moby) container
Shell
18
star
8

request.cc

Simple HTTP request lib backed by libcurl, inspired by superagent.
C++
11
star
9

stardux

Functional DOM containers based on starplate and redux
JavaScript
10
star
10

littlstar-ios-sdk

Littlstar iOS SDK
Objective-C
9
star
11

lager

A module for collecting data and programmatically flushing it to a single endpoint.
JavaScript
9
star
12

sop

Simple OBJ Parser
C
9
star
13

libgossip

Message queueing in Objective-C without Foundation dependency
Objective-C
9
star
14

rotating-s3-stream

Writable local stream that rotates and syncs to AWS S3 based on max file size or age. Optimized for speed and concurrency.
JavaScript
8
star
15

l3

Dead simple local cdn
JavaScript
8
star
16

orthographic-camera

A high level 3D orthographic camera
JavaScript
6
star
17

pushlytics

Simple server to serve a pixel and record metrics in a LevelDB instance
JavaScript
6
star
18

trim.cc

std::string trim utility
C++
5
star
19

json-struct

validate JSON structures
JavaScript
5
star
20

gqlc

GraphQL Schema Compiler
JavaScript
5
star
21

proposal-did-method-dat

A proposal for a Decentralized Identity (DID) method for the DAT Protocol
4
star
22

dat-did-resolver

DID Method for the DAT Protocol. Resolve a DDO (DID Document) for a DAT.
JavaScript
4
star
23

video-transcode-experiment

C
4
star
24

axis3d-extrude-geometry

JavaScript
4
star
25

ruby-sdk

The official Littlstar Ruby Gem Client Library
Ruby
4
star
26

bpp

Bits-per-pixel calculator
JavaScript
3
star
27

gean

"Composable" Generator Control
JavaScript
3
star
28

three-canvas-renderer

JavaScript
3
star
29

slant-photo

Minimal 360 photo viewer built with three.js.
JavaScript
3
star
30

web-lager

[DEPRECATED] Flexible logger with Express access logging and S3 integration
JavaScript
3
star
31

mlist

Fast lisp like memory lists
JavaScript
3
star
32

chasma

Application Screen Management
JavaScript
3
star
33

acts_as_starable

A gem to add staring functionality to ActiveRecord models
Ruby
3
star
34

git-tree

Tree command scoped to your git project leveraging .gitignore
Shell
3
star
35

clamp

Macro to clamp a value between two other values
C
2
star
36

python-sdk

Littlstar Python SDK
Python
2
star
37

slant-controls

Core video controls API for slant
JavaScript
2
star
38

littlstar.github.io

Littlstar Developer Portal Jekyll Site
CSS
2
star
39

axis3d-orbit-camera

Orbit camera controller for Axis3D
JavaScript
2
star
40

lsplayer-iframe-sdk

Littlstar iframe SDK
JavaScript
2
star
41

slant-player

Slant video player component
JavaScript
2
star
42

regl-examples

Example usage of regl
JavaScript
1
star
43

eslint-config-littlstar

JavaScript
1
star
44

three-vr-effect

THREE.VREffect as a module
JavaScript
1
star
45

wonder3d

A minimal 360 video player
JavaScript
1
star
46

axis3d-inputs

Common user inputs for Axis3D.
JavaScript
1
star
47

redshift-query

Simple function to query Redshift
JavaScript
1
star
48

nrsession

Fetch npm modules and jump into a repl
JavaScript
1
star
49

LSBatch

Batch control flow for Objective-C
Objective-C
1
star
50

persist-store

Syncs file across multiple sources
JavaScript
1
star
51

axis3d-obj-geometry

Converts .OBJ source into an Axis3D Geometry instance.
JavaScript
1
star