How can I access a texture created through C# code (using Texture2D) in a unity shader as a sampler2D?

I want to access the texture “G” in my shader, and use it as a sampler 2D, so that I can access the RGBA values in my shader: how can I make sure I can use this texture G in my shader? In this case, both my shader and the create texture script (texture G) are attached to the same gameObject.
//Forexample, create the following Texture G
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class calculator : MonoBehaviour {

// Use this for initialization
void Start () {
	  Texture2D G = new Texture2D(128, 128);
    GetComponent<Renderer>().material.mainTexture = G;

    for (int y = 0; y < G.height; y++)
    {
        for (int x = 0; x < G.width; x++)
        {
            Color color = ((x & y) != 0 ? Color.white : Color.gray);
            G.SetPixel(x, y, color);
        }
    }
    G.Apply();

}

// Update is called once per frame
void Update () {
	
}

}

https://docs.unity3d.com/ScriptReference/Material.SetTexture.html

1 Answer

1

Hello @donutLaserDev, thanks for this insight. I actually had found this out but I am trying to create a texture look up table so that I can pass a stored value in the look-up texture to a 2D array in a shader. How could I pass these values and read them in the shader??? I will be grateful on your insignts. I am not sure if tex2D(SAMPLER2D, TEXCOORD) works that I have values stored in the pixels but not in texture coordinates.

Yep, totally my fault that I did not predict that right. Should have been obvious from your code that 47 is the default and not 55 -.- btw I would consider fovs around 55 or 47 as a high zoom fov. I usually play most games with a [fov between 110 and 120][1] ^^ I just checked my old quake config and yes, 120 default and 40 is my high zoom fov (which is even too much for most smaller maps). [1]: https://www.youtube.com/watch?v=982ef7zDRiA