Code Monkey home page Code Monkey logo

Comments (3)

tfriedel6 avatar tfriedel6 commented on July 22, 2024

Hi! Thanks for the nice comments!

I don't see anything wrong with the code, and cv.DrawImage should also work. I tried writing a test function for client.Screen to test it out, but it seems to work fine for me. Can you try this and see if that works? If not, it may be an OpenGL or driver issue maybe...

package main

import (
	"image"
	"image/color"
	"math/rand"
	"time"

	"github.com/tfriedel6/canvas/glfwcanvas"
)

var (
	first = true
	bla   = time.Now()
	limg  *image.RGBA
)

func clientScreen() (image.Image, int64) {
	if !first && rand.Float64() < 0.99 {
		return limg, bla.UnixNano()
	}
	first = false
	rgba := image.NewRGBA(image.Rect(0, 0, 800, 800))
	for y := 0; y < 800; y++ {
		for x := 0; x < 800; x++ {
			rgba.Set(x, y, color.RGBA{
				R: byte(rand.Intn(256)),
				G: byte(rand.Intn(256)),
				B: byte(rand.Intn(256)),
				A: 255,
			})
		}
	}
	bla = time.Now()
	limg = rgba
	return rgba, bla.UnixNano()
}

func main() {
	win, cv, err := glfwcanvas.CreateWindow(800, 800, "hello")
	if err != nil {
		panic(err)
	}
	var lastRefresh int64
	win.MainLoop(func() {
		// This call returns a new image and the last timestamp it was updated
		img, lastUpdate := clientScreen()

		imgWidth := img.Bounds().Max.X
		imgHeight := img.Bounds().Max.Y

		// If the image is empty, terminate loop
		if imgWidth == 0 || imgHeight == 0 {
			return
		}

		// If there were no changes, terminate loop
		if lastRefresh == lastUpdate {
			return
		}

		// Process screen updates
		// cv.PutImageData(img.(*image.RGBA), 0, 0)
		cv.DrawImage(img, 0, 0)
		lastRefresh = lastUpdate
	})
}

from canvas.

deluan avatar deluan commented on July 22, 2024

This is definitely an issue with OpenGL, as it works flawless with SDL. I tried my code with SDL and it worked. I also tried your code and it still flicks (and scales down the image, weird), but when I try it with SDL it also works perfectly.

I think it is worth to note that OpenGL is working in my machine. I'm actually trying to port my code from using Pixel to your library, and with Pixel it works ok.

My system is macOS Mojave, I don't have an easy way to test this in other systems, but I'm willing to help in anyway I can to make this work, as I rather not have to install extra dependencies (SDL2) for my code to work.

from canvas.

tfriedel6 avatar tfriedel6 commented on July 22, 2024

This will be difficult for me to test, as I don't have a Mac available to test on. I do have a VM running macOS, but it is an old version and I can't even install the latest Xcode on it. I tried running the GLFW example on that, but it just crashes immediately (SDL works though).

One thing worth trying might be to get it running on the latest versions GLFW. In case you want to do this you could just copy the glfwcanvas package into a package of your own and use that, then go get the latest github.com/go-gl/glfw version. If that helps, let me know and I will update the dependency here. If not, you can try the 3.3-beta branch (run go get github.com/go-gl/[email protected]) and see if you can get it to run with GLFW 3.3.

from canvas.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.