bandybabboon
bandybabboon

Reputation: 2356

Compiler is refusing to compile correct code in Unity3d C#

I just added an integer argument to a function definition and added an integer to the only instance where the function is called. an error is generated:

CustomShaderEditor.cs(44,46): error CS1501: No overload for method UpdateTexture' takes0' arguments

I don't know how to cope with an error of this kind, I would love some advice.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System;

public class CustomShader : MonoBehaviour 
{

    public int numTiles = 10;
    public GameObject RenderGameObject;
    public GameObject[] gamObjectClones;    
    public Texture2D ComputeTexture;    
    public ComputeShader ComputeShader; 
    ComputeBuffer wavBuffer ;
    ComputeBuffer computeBuffer ;

    void Start () 
    {
        ResetTexture();
        gamObjectClones = new GameObject[numTiles];
        for (int i=0; i<numTiles; i++)
        {
            gamObjectClones[i] = (GameObject)Instantiate(RenderGameObject, new Vector3(i * 10.0f, 0, 0), Quaternion.identity);
        }

    }

    void Update ()  
    {
        RefreshComputeShaderMaterial();
    }   

    public void RefreshComputeShaderMaterial()
    {       
        for (int i=0; i<numTiles; i++)
        {

            UpdateTexture(  10 );           


            Material m = gamObjectClones[i].GetComponent<Renderer>().sharedMaterial;

            if (m.HasProperty("_DataTexture"))
            {
                m.SetTexture("_DataTexture", ComputeTexture);
            }
        }   
    }

    public void ResetTexture()
    {
        int BufferSize = ComputeTexture.width * ComputeTexture.height;
        Color[] ColorBuffer = new Color[BufferSize];
        ComputeTexture.SetPixels(ColorBuffer);
        ComputeTexture.Apply();
    }

    public void SetupTexture()
    {
        int BufferSize = ComputeTexture.width * ComputeTexture.height;
        Color[] ColorBuffer = ComputeTexture.GetPixels();

        for (int i=0; i<BufferSize; i++)
        {
            if ((i&31)==31)
            {
                ColorBuffer[i] = Color.white;
            }
        }

        ComputeTexture.SetPixels(ColorBuffer);
        ComputeTexture.Apply();
    }   

    public void UpdateTexture( int tile )
    {
        int csi;
        csi = ComputeShader.FindKernel("computeGameOfLife");

        if (csi>-1)
        {
            var ran = UnityEngine.Random.Range(1f,100f);

            int BufferSize = ComputeTexture.width * ComputeTexture.height;
            Vector4[] TextureBuffer = new Vector4[BufferSize];
            Color  [] ColorBuffer   = ComputeTexture.GetPixels();

            for (int i=0; i<BufferSize; i++)
            {
                TextureBuffer[i].x = 0;//Mathf.Sin(i/10f);
                TextureBuffer[i].y = 0;
                TextureBuffer[i].z = 0;
                TextureBuffer[i].w = 0;
            }

            computeBuffer = new ComputeBuffer(BufferSize, sizeof(float) * 4);
            computeBuffer.SetData(TextureBuffer);
            ComputeShader.SetBuffer(csi, "DataTexture", computeBuffer);

            //////////////////// patch
            int sBufferSize = 88000 ;
            float[] sTextureBuffer = new float[sBufferSize] ;

            for (int i = 0 ; i < sBufferSize ; i++)
            {
                sTextureBuffer[ i ] = Mathf.Sin( i / ran + 20*Mathf.Sin(i/1000)  ) ;
            }

            ReleaseBuffers();
            print( " sin " + sTextureBuffer[23]);
            wavBuffer = new ComputeBuffer(sBufferSize, sizeof(float)  ) ;
            wavBuffer.SetData(sTextureBuffer);
            ComputeShader.SetBuffer(csi, "re", wavBuffer) ;
             //wavBuffer.Release() ;
            /////////////////////

            ComputeShader.Dispatch(csi, 1, 1, 1);           
            computeBuffer.GetData (TextureBuffer);
            computeBuffer.Release();

            for (int i=0; i<BufferSize; i++)
            {
                ColorBuffer[i].r = TextureBuffer[i].x;
                ColorBuffer[i].g = TextureBuffer[i].y;
                ColorBuffer[i].b = TextureBuffer[i].z;
                ColorBuffer[i].a = TextureBuffer[i].w;
            }

            ComputeTexture.SetPixels(ColorBuffer);
            ComputeTexture.Apply();
        }
    }

    public void ReleaseBuffers() {
        if (wavBuffer != null) wavBuffer.Release();
        wavBuffer = null;
    }   




}

Upvotes: 1

Views: 95

Answers (1)

Programmer
Programmer

Reputation: 125455

UpdateTexture( i ); //'=-='error is for this line

This is not the problem with your code. There is a problem somewhere else. Make sure to save the new code and see whether your old code is still the one being used instead of the new code. Also re-start Unity. If these fails, dump your whole code here for further help because what you have now is NOT the problem.

Upvotes: 1

Related Questions