good morning!!!!

Skip to content
Snippets Groups Projects
Commit d69143f0 authored by Garet Halliday's avatar Garet Halliday
Browse files

initial commit

parents
No related branches found
Tags v0.2.3
No related merge requests found
Pipeline #7906 failed with stages
in 25 seconds
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="Go" enabled="true" />
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/glslopt.iml" filepath="$PROJECT_DIR$/.idea/glslopt.iml" />
</modules>
</component>
</project>
\ No newline at end of file
glsl-optimizer but without the cross-platform incompatibility nonsense of C++
uses node because the project was compiled to javascript, and then wrapped in a Go CLI tool
you can use it without Go by running `cd ./glslprep && node ./glslopt.js <type> <input> <output>`
\ No newline at end of file
This diff is collapsed.
File added
const fs = require("fs");
var Module = require("./glsl-optimizer.js");
var optimize_glsl = Module.cwrap('optimize_glsl', 'string', ['string', 'number', 'number']);
var args = process.argv.slice(2)
if (args.length != 3) {
console.log("usage: glslopt <vs|fs> <input> <output>")
return
}
var type = args[0] === "vs";
var input = args[1];
var output = args[2];
fs.readFile(input, function(err,input) {
if (!err) {
var result = optimize_glsl("" + input, 3, type);
fs.writeFile(output, result, (err) => {
if (err) {
console.log(err)
}
})
} else {
console.log(err);
}
});
go.mod 0 → 100644
module glslopt
go 1.19
require github.com/dop251/goja v0.0.0-20221003171542-5ea1285e6c91
require (
github.com/dlclark/regexp2 v1.7.0 // indirect
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
golang.org/x/text v0.3.7 // indirect
)
go.sum 0 → 100644
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo=
github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk=
github.com/dop251/goja v0.0.0-20221003171542-5ea1285e6c91 h1:1PfaQuGdeJVnHHQ0tg0Jw7MXagyqaAupJyk35/QM3I4=
github.com/dop251/goja v0.0.0-20221003171542-5ea1285e6c91/go.mod h1:yRkwfj0CBpOGre+TwBsqPV0IH0Pk73e4PXJOeNDboGs=
github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y=
github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM=
github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU=
github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
main.go 0 → 100644
package main
import (
"embed"
"flag"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
)
const glslDir = "glslprep"
//go:embed glslprep
var GLSLPrep embed.FS
func main() {
input := flag.String("input", "", "which file to optimize")
output := flag.String("output", "", "where to put the result")
flag.Parse()
if *input == "" || *output == "" {
panic("usage: glslopt --input=<input> --output=<output>")
}
err := Optimize(*input, *output)
if err != nil {
panic(err)
}
}
func copyTemp() (dir string, err error) {
dir, err = os.MkdirTemp("", glslDir)
if err != nil {
return
}
var files []os.DirEntry
files, err = GLSLPrep.ReadDir(glslDir)
if err != nil {
return
}
for _, f := range files {
var b []byte
b, err = GLSLPrep.ReadFile(glslDir + "/" + f.Name())
if err != nil {
log.Println("err here")
return
}
err = os.WriteFile(filepath.Join(dir, f.Name()), b, 0777)
if err != nil {
return
}
}
return
}
func Optimize(input, output string) error {
var shaderType string
if strings.HasSuffix(input, ".frag") {
shaderType = "fs"
} else {
shaderType = "vs"
}
dir, err := copyTemp()
if err != nil {
return err
}
defer os.RemoveAll(dir)
var absInput, absOutput string
absInput, err = filepath.Abs(input)
if err != nil {
return err
}
absOutput, err = filepath.Abs(output)
if err != nil {
return err
}
cmd := exec.Command("node", "./glslopt.js", shaderType, absInput, absOutput)
cmd.Dir = dir
var res []byte
res, err = cmd.Output()
if len(res) > 0 {
log.Println(string(res))
}
if err != nil {
return err
}
return nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment